Programowanie w języku powłoki – kurs BASH Cz. 3
1. instrukcja CASE – pozwala na dopasowanie zmiennej do podanego wzorca i skierowanie wykonania skryptu do odpowiedniej sekcji. Poszczególne warianty są sprawdzane w kolejności od słowa kluczowego „case”. Przypasowanie domyślne oznaczone symbolem * zostanie wykonane gdy zmienna nie będzie pasować do żadnego z podanych wzorców. Stosowanie go pozwala na zabezpieczenie skryptu przed ewentualnymi błędami.
Składnia:
case zmienna in
"wzorzec1") polecenie1 ;;
"wzorzec2") polecenie2 ;;
"wzorzec3") polecenie3 ;;
*) polecenie_domyślne esac
2. pętla FOR. Wykonuje polecenia zawarte wewnątrz pętli.
Składnia polecenia:
for zmienna in lista do
polecenie done
Przykład:
#!/bin/bash
echo "Podaj cyfrę dnia tygodnia"
read d case "$d" in
"1") echo "Poniedziałek" ;;
"2") echo "Wtorek" ;;
"3") echo "Środa" ;;
"4") echo "Czwartek" ;;
"5") echo "Piątek" ;;
"6") echo "Sobota" ;;
"7") echo "Niedziela" ;;
*) echo "Nic nie wybrałeś"
esac
Przykład:
for x in jeden dwa trzy do
echo "To jest $x"
done
wartością zmiennej x stają się po kolei elementy jeden, dwa, trzy po czym wykonywane są polecenia po słowie kluczowym Do.
Polecenie jest bardzo przydatne w przypadku wykonywania operacji seryjnej na plikach lub katalogach. Przykładowo jeśli chcemy zyskać listę wszystkich plików *.sh to można to zrobić wg przykładu:
3. Polecenie SELECT. Słuzy do tworzenia interaktywnego menu w którym każdej pozycji odpowiada kolejna liczba od 1 do n. Zaraz po menu wyświetlany jest znak zachęty PS3 w oczekiwaniu na wprowadzenie wyboru. W razie nie wybrania żadnej z pozycji i naciśnięcia klawisza enter, menu zostanie wyświetlone ponownie. Wybrana opcja jest zapisywana pod zmienną REPLY. Jeśli odczytanym znakiem będzie EOF (Ctrl+d) to selekt zakończy pracę. Pętla działa do czasu wykonania polecena break lub return.
Składnia polecenia:
select zmienna in lista do
polecenie done
4. Pętla WHILE, najpierw sprawdza warunek a potem wykonuje polecenia zawarte pomiędzy słowami kluczowymi DO..DONE. Pętla działa dopuki warunek staje się fałszywy.
Składnia:
while warunek
Przykład:
#!/bin/bash for x in *.sh do
echo "plik $x"
done
Przykład:
#!/bin/bash
echo "Co wybierasz?"
select y in X Y Z Quit do
case $y in
"X") echo "Wybrałeś X" ;;
"Y") echo "Wybrałeś Y" ;;
"Z") echo "Wybrałeś Z" ;;
"Quit") exit ;;
*) echo "Nic nie wybrałeś"
esac break done
do
polecenie done
5. pętla UNTIL, sprawdza czy warunek jest prawdziwy, a polecenia są wykonywane wtedy gdy warunek jest fałszywy.
Składnia:
until warunek do
polecenie done
6. Polecenie READ. Służy do wprowadzania danych ze standardowego wejścia.
Składnia:
Read – opcje zmienna
Polecenie pozwala na pobranie wartości kilku zmiennych wg przykładu:
Przykład:
#!/bin/bash x=1;
while [ $x -le 20 ]; do echo "komunikat nr: $x"
x=$[x + 1]
done
Przykład:
#!/bin/bash x=1;
until [ $x -ge 10 ]; do echo "komunikat nr: $x"
x=$[x + 1]
don
Przykład:
#!/bin/bash
echo -n "Wpisz coś:\a"
read wpis echo "$wpis"
Przykład:
#!/bin/bash
echo "Wpisz cztery wartości:"
read a b c
echo "Wartość zmiennej a to: $a"
echo "Wartość zmiennej b to: $b"
echo "Wartość zmiennej c to: $c"
Opcje polecenia:
• -p pokaże znak zachęty bez znaku nowej linii
• -a kolejne wartości przypisywane są do klejnych indeksów zmiennej tablicowej
• -e jeśli nie podano nazwy zmiennej to pobrana wartość trafia do zmiennej $REPLY
7. Funkcje. Podobnie jak w innych językach programowania, tak i w bash istnieje możliwość dzielenia kodu skryptu na funkcjonalne bloki zwane funkcjami.
Składnia:
function nazwa_funkcji {
polecenie1 polecenie2 polecenie3 }
Funkcje można umieścić w innym pliku, przez co skrypt właściwy będzie bardziej czytelny.
Aby z takich funkcji w osobnym pliku skorzystać należy do skryptu plik z definicją funkcji podlinkować. Tworzy się to poprzez zapis: . ~/naszplik_z_funkcjami (kropka spacja i nazwa pliku z definicją/definicjami funkcji). Samo wywołanie danej funkcji przebiega już tak jak w przypadku funkcji zadeklarowanej w jednym pliku.
8. Obliczanie wyrażeń arytmetycznych przeprowadza się wg schematu:
$((wyrażenie)) lub $[wyrażenie]
Przykłady:
#!/bin/bash
read -p "Pisz:" odp echo "$odp"
#!/bin/bash
echo "Podaj elementy zmiennej tablicowej:"
read tablica echo "${tablica[*]}"
#!/bin/bash echo "Wpisz coś:"
read -e
echo "$REPLY"
Przykład:
#!/bin/bash echo $((8/2))
wynik=$[4*5/2]
echo "$wynik"
read -e
echo "$REPLY"
Przykład:
#!/bin/bash
for pliki_html in $(ls *.html) do
numer=$((numer+1)) echo "$numer. "
echo $pliki_html done
Przeprowadzanie obliczeń arytmetycznych można także zrealizować za pomocą polecenia LET.
Przykłady:
#!/bin/bash
liczba1=5 liczba2=6
let wynik=liczba1*liczba2 echo $wynik