Drugie zajęcia z BASHa – programowanie
Wykonanie polecenia w tle:
polecenie &
– kod zakończenia programu – 0 jeśli poprawnie, inny jeśli pojawił się błąd (często wartość oznacza rodzaj błędu)
$?
$1, $2, … – parametry wykonania programu. Np. skrypt.sh napis1 2 umieści w zmiennej $1 napis1, a w zmiennej $2 liczbę 2. $@ – lista wszystkich parametrów.
Zmienne:
Definicja: zmienna=wartosc
– uwaga – nie może być spacji wokół ‘=’.
Wartość: $zmienna
Obliczenie wyrażenia arytmetycznego: (( wyrażenie ))
Np. zwiększenie zmiennej1 o wartość o 1:
(( zmienna++ ))
– o wartość zmiennej2:
zmienna1=$(( $zmienna1+$zmienna2 ))
Instrukcja warunkowa
if warunek
then ...
elif ...
else ...
fi
Przy czym warunek zapisuje się np. tak:
[ wyrażenie operator wyrażenie ]
– znów uwaga na spacje!
Przykład:
if [ $zmienna1 -lt $zmienna2 ]; then
echo $zmienna2
else
echo $zmienna1
fi
Pętle for
W bashu też możemy wykonywać czynności w pętlach. Składnia:
for i in …
do
…
done
1. Wpiszmy:
for i in 1,2,3,4,5
do
done
2. 1,2,3,4,5 możemy zastąpić poprzez {1..5}
for i in {1..5}
do
done
3. Wiele linijek możemy skrócić do pojedynczej linii:
for i in {1..5}; do echo “Welcome $i times”; done
4. Możemy wykonywać operacje na plikach np.:
for i in osoby/telefony/*.txt; do cat $i ; done
5. Zakończone operacje na plikach możemy przekierować do naszego nowego pliku z wynikiem.
Np jeśli chcemy zrobić listę numerów telefonów:
for i in osoby/telefony/*.txt; do cat $i >>lista_telefonow.txt ;
done
6. Jeśli chcemy zrobić dwie operacje w pętli, to rozdzielamy je średnikami, np:
for i in osoby/telefony/*.txt; do echo $i; cat $i ; done
7. Możemy napisać też pętlę w pętli. Prosty przykład:
for i in {1..3} ; do for j in {2..3}; do result=$(($i*$j)); echo
$result; done ; done
echo “Welcome $i times.”
echo “Welcome $j times.”
Zadania:
- Napisz skrypt, który będzie zmieniał rozszerzenie plików w danym katalogu. Skrypt przyjmuje trzy parametry: rozsz1 rozsz2 katalog i będzie zmieniał rozszerzenie plikom, które dotąd miały rozszerzenie rozsz1 na rozsz2 w katalogu katalog.
- Napisz skrypt sumujący wszystkie swoje parametry.
- Korzystając z polecenia ls wypisz sumaryczny rozmiar wszystkich plików (i katalogów) w danym katalogu.
- Napisz skrypt, który wykona polecenie zadane jako parametr (napis w cudzysłowie), wypisując na stdout stderr tego polecenia, a pominie całkowicie stdout. Wskazówka: jest taki specjalny plik /dev/null, do którego można pisać cokolwiek i to znika (taka czarna dziura).
- (*) Przeszukaj swój katalog domowy rekurencyjnie i znajdź wszystkie wystąpienia plików o tej samej nazwie (mogą się różnić co najwyżej wielkością liter). Na wyjściu chcemy dostać takie nazwy poprzedzone liczbą wystąpień.