WDI – zajęcia 13

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:

  1. 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.
  2. Napisz skrypt sumujący wszystkie swoje parametry.
  3. Korzystając z polecenia ls wypisz sumaryczny rozmiar wszystkich plików (i katalogów) w danym katalogu.
  4. 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).
  5. (*) 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ń.

Leave a Reply

Your email address will not be published. Required fields are marked *