Wykorzystanie cydzysłowie:
- ‘ oraz ‘ – apostfory służą do łączenia zawartych w nim znaków jako jeden ciąg znaków. Jest to użyteczne np. przy przekazywaniu parametru pozycyjnego zawierającego znak specjalny – np. spację. Apostrof pozwala na wykorzystanie wszystkich znaków specjalnych z wyjątkiem samego apostrofa, któego nie można użyć nawet poprzedzając backslashem.
123bash-3.2$ echo 'Znaki specjalne: ~!@#$%^&*()-+;<>,.?/\|'Znaki specjalne: ~!@#$%^&*()-+;<>,.?/\|bash-3.2$ - ” oraz ” – podwójny apostrof służy do łaczenia zawartych w nim znaków jako jeden ciąg znaków. Ciąg znaków zawarty w podwójny apostrof podlega przetwarzaniu i interpretacji przez bash przez co pozwala na skorzystanie ze znaków specjalnych.
12345678bash-3.2$ i=1bash-3.2$ echo "Ala ma $i kota"Ala ma 1 kotabash-3.2$ echo "Ala ma \$i kota"Ala ma $i kotabash-3.2$ echo "Ala ma \$i kota i podwójne cudzysłowie \" i pojedyncze cudzysłowie ' "Ala ma $i kota i podwójne cudzysłowie " i pojedyncze cudzysłowie 'bash-3.2$ oraz
– pojedynczy apostrof odwrotnie skierowany służy do wykonania polecenia zawartego w nim oraz wstanie w miejsce wystapienia tych apostrofów standardowego wyjścia tego polecenia.
12345678910111213bash-3.2$ echo `echo ala`alabash-3.2$ cat > plik.txtPlik testowy - pierwsza liniadruga liniatrzecia liniabash-3.2$ echo `head -1 ./plik.txt`Plik testowy - pierwsza liniabash-3.2$ i=1bash-3.2$ i1=2bash-3.2$ echo $[i`echo $i`]2bash-3.2$
Instrukcja read
Instrukcja read służy do pobierania od użytkownika ciągu znaków i podstawienia go pod wartość zmiennej.
1 2 3 4 5 6 |
bash-3.2$ read zmienna2 Wartość mojej zmiennej\ > druga linia bash-3.2$ echo $zmienna2 Wartość mojej zmiennejdruga linia bash-3.2$ |
Instrukcja test
Polecenie test sprawdza zadany warunek i zwraca wartość true jeśli jest spełniony (tj. polecenie kończy się pomyślnie) oraz false gdy nie jest.
Struktura:
1 2 3 4 5 6 7 |
bash-3.2$ test 3 -lt 1 bash-3.2$ echo $? 1 bash-3.2$ test 3 -lt 5 bash-3.2$ echo $? 0 bash-3.2$ |
Test można również zapisać za pomocą dwóch nawiasów kwadratowych:
1 2 3 4 5 6 7 |
bash-3.2$ [ 3 -lt 1 ] bash-3.2$ echo $? 1 bash-3.2$ [ 3 -lt 5 ] bash-3.2$ echo $? 0 bash-3.2$ |
Jednoargumentowe na plikach:
- -c plik – sprawdza czy plik jest urządzeniem znakowym
- -b plik – sprawdza czy plik jest urządzeniem blokowym
- -e plik – sprawdza czy plik istnieje
- -f plik – sprawdza czy plik jest zwykłym plikiem
- -d plik – sprawdza czy plik jest katalogiem
- -L plik – sprawdza czy plik jest dowiązaniem symbolicznym
Jednoargumentowe na zmiennych:
- -z $zmienna – sprawdza czy zmienna ma zerową długość
- -n $zmienna – sprawdza czy zmienna ma niezerową długość
Dwuargumentowe na liczbowach:
- $zmienna1 -lt $zmienna2 – kod powrotu 0 gdy zmienna1 jest mniejsza od zmienna2
- $zmienna1 -le $zmienna2 – kod powrotu 0 gdy zmienna1 jest mniejsza lub równa od zmienna2
- $zmienna1 -gt $zmienna2 – kod powrotu 0 gdy zmienna1 jest większa od zmienna2
- $zmienna1 -ge $zmienna2 – kod powrotu 0 gdy zmienna1 jest większa lub równa od zmienna2
- $zmienna1 -eq $zmienna2 – kod powrotu 0 gdy zmienna1 jest równa zmienna2
- $zmienna1 -ne $zmienna2 – kod powrotu 0 gdy zmienna1 jest różna od zmienna2
Dwuargumentowe operacje na ciągach znaków
- $zmienna1 == $zmienna2 – kod powrotu 0 gdy ciąg znaków zmienna1 jest równy zmienna2
- $zmienna1 != $zmienna2 – – kod powrotu 0 gdy ciąg znaków zmienna1 jest różny od zmienna2
Uwaga:
W miejsce $zmienna1 i $zmienna2 bash wstawia wartość tych zmiennych, więc realnie wykonywane polecenia, to porównywanie wartości tych zmiennych. Z tego powodu, jeśli zmienna1 lub zmienna2 są puste, polecenie test zakończy się niepowodzeniem przez błąd składni.
Instrukcja if
Instrukcja if służy do sterowania warunkowego wykonaniem skryptu.
Struktura if:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash echo -n "Podaj zmienną liczową: " read i if [ $i -gt 5 ] then echo Wczytana zmianna jest większa od 5 elif [ $i -lt 5 ] echo Wczytana zmianna jest mniejsza od 5 else echo Wczytana zmianna jest równa 5 fi |
Przykłady
1 2 3 4 5 6 7 |
#!/bin/bash if /bin/true then echo "sprawdzamy poprawne wykoannie" else echo nic fi |
Pętla for
Pętla for służy do iterowania po zadanych wartościach.
Może iterować po zadanych ciągach znaków:
1 2 3 4 |
for i in ala ma kota do echo $i done |
1 2 3 4 |
for i in "ala ma" kota do echo $i done |
Jako parametr ciągu znaków po którym ma iterować zmienna można podać polecenie podane w apostrofie:
1 2 3 4 |
for i in `ls` do echo $i done |
Może również iterować po wartościach liczobowych:
1 2 3 4 |
for ((i=1;i<10;i++)) do echo $i done |
W pętli for można również skorzystać z instrukcji break i continue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash for ((i=1;i<10;i++)) do if [ $i -eq 5 ] then continue elif [ $i -eq 9 ] then break else echo $i fi done |
Pętla while
Pętla while służy do wykonywania zadanych operacji dopóki warunek wejściowy jest spełniony.
Struktura while:
1 2 3 4 5 6 7 |
#!/bin/bash i=5 while [ $i -gt 0 ] do echo $i i=$((i+1)) done |
W pętli while można skorzystać również z instrukcji break i continue:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash i=0 while /bin/true do i=$((i+1)) if [ $i -lt 10 ] then continue elif [ $i -lt 20 ] then echo $i else break fi done |
Instrukcja case
1 2 3 4 5 6 |
case wartość in "wzor1") polecenie ;; "wzor2") polecenie ;; ... *) polecenie_domyślne esac |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash echo -n "Podaj cyfrę lub znak: " read d case "$d" in 0) echo "Podałeś zero" ;; 1) echo "Podałeś jeden" ;; 2) echo "Podałeś dwa" ;; 3) echo "Podałeś trzy" ;; [4-5]) echo "Podałeś cztery lub pięć" ;; [6-9]) echo "Podałeś cyfrę większą od pięć" ;; [a-Z]) echo "Podałeś znak" ;; *) echo "Nie podałeś ani cyfry ani znaku!" esac |
Instrukcja eval
Instrukcja eval służy do zbudowania komendy i jej wykonania przez powłokę.
1 2 3 4 |
bash-3.2$ t="echo ala ma kota" bash-3.2$ eval $t ala ma kota bash-3.2$ |
Poprzez zacytowanie znaków specjalnych eval może również korzystać ze zmiennych.
1 2 3 4 5 6 7 8 9 10 11 |
bash-3.2$ cz1="ala ma \$i koty" bash-3.2$ cz2="i \$j psy" bash-3.2$ i=3 bash-3.2$ j=2 bash-3.2$ echo $cz1 ala ma $i koty bash-3.2$ echo $cz2 i $j psy bash-3.2$ eval echo $cz1 $cz2 ala ma 3 koty i 2 psy bash-3.2$ |
Program expr
Program expr służy do obliczania wartości arytmetycznych:
1 2 3 4 5 6 7 8 9 10 11 |
bash-3.2$ expr 3 \* 2 6 bash-3.2$ expr 3 + 1 4 bash-3.2$ expr 3 / 2 1 bash-3.2$ expr 3 \* 2 6 bash-3.2$ expr 3 - 1 2 bash-3.2$ |