Kontrolą przepływu w przypadku bash zajmują się funkcję znane doskonale z innych języków programowania. Funkcję tę umożliwiają sprawdzić i porównać warunki na podstawie których podejmowana jest dalej decyzja co zostanie zrobione. Opcje te zgodne są z istniejącymi funkcjami systemów UNIX. Mowa tu o instrukcjach if, if else, oraz operatorach logicznych stosowanych do wykonania testów. Określone operatory mogą posłużyć do porównania elementów danych. W repertuarze dostępne jest również polecenie "test" do przeprowadzania testów. Znajomość tych rozwiązań może pomóc w tworzeniu lepszych i bardziej zaawansowanych narzędzi działających w powłoce Linux.
if warunek ;
then
polecenia;
fi
WARUNEK INSTRUKCJI ELSE IF ELSE
if warunek;
then
polecenia;
elif warunek;
then
polecenia
else
polecenia
fi
W przypadku instrukcji if oraz else można zagnieżdżać instrukcję w poprzednich instrukcjach if else. Warunki te mogą być znacznej długości i aby je nieco uprościć i skrócić możemy zastosować operatory logiczne:
[ warunek ] && działanie ; Działanie zostanie wykonane jeżeli warunek jest prawdziwy
[ warunek ] || działanie; Działanie zostanie wykonane jeżeli warunek nie jest spełniony.
Znaki && reprezentują operację logiczną AND , a znaki | | oznaczają OR. Przydaje się to podczas pisania bardziej rozbudowanych skryptów bash'a.
PORÓWNANIA MATEMATYCZNE
Warunki zwyczajowo umieszczone są w nawiasach kwadratowych [ ]. Warto zauważyć, że miedzy tymi nawiasami i argumentami znajduje się spacja. Bez spacji zostanie wygenerowany błąd o czym należy pamiętać.
Przykładowe wykonanie operacji porównań matematycznych :
[ $zmienna -eq 0 ] - Zwraca wartość true jeżeli zmienna jest równa 0
[ $zmienna -ne 0 ] - Zwraca wartość true gdy zmienna nie jest równa 0
Inne ważne operatory to :
- -gt - większe niż,
- -lt - mniejsze niż,
- -ge - większe niż lub równe,
- -le - mniejsze niż lub równe.
Warunki mogą również być ze sobą łączone :
[ $zmienna1 -ne 0 -a $zmienna2 -gt 2 ] - użycie operatora AND "-a "
[ $zmienna1 -ne 0 -o $zmienna2 -gt 2 ] - użycie operatora OR "-o"
PORÓWNANIA ŁAŃCUCHÓW
Jeżeli chcemy porównywać łańcuchy znaków najlepiej skorzystać z podwójnych nawiasów kwadratowych, ponieważ stosowanie nawiasów pojedynczych w tym wypadku może powodować błędy więc lepiej ich unikać.
By sprawdzić czy dwa łańcuchy są identyczne można to wykonać w następujący sposób:
[[ $zmienna1 = $zmienna2 ]] - zwróci true jeżeli łańcuchy będą identyczne
[[ $zmienna1 == $zmienna2 ]] - alternatywna metoda sprawdzania identyczności
Jak sprawdzić czy łańcuchy różnią się od siebie ?
[[ $zmienna1 != $zmienna2 ]] - zwróci wartość true gdy łańcuchy różnią się od siebie
Mamy również możliwość porównania łańcuchów wg ich długości z uwzględnieniem kolejności alfabetycznej
[[ $zmienna1 > $zmienna2 ]] - zwróci wartość true jeżeli zmienna1 będzie dłuższa od zmiennej2
[[ $zmienna1 < $zmienna2 ]] - zwróci wartość true jeżeli zmienna1 będzie krótsza od zmiennej2
[[ -z $zmienna ]] - zwraca wartość true jeżeli w zmiennej znajduje się pusty łańcuch
[[ -n $zmienna ]] - zwraca wartość true jeżeli zawartość zmiennej jest niepusta.
Korzystając z wymienionych wcześniej operatorów logicznych łatwo można połączyć kilka warunków:
if [[ -n $zmienna1 ]] && [[ -z $zmienna2 ]];
then
polecenia;
fi
PRZYKŁADOWE SKRYPTY Z PORÓWNANIAMI
Jeżeli użytkownik jako argument wpisze bolek zobaczy na ekranie wynik "lolek" jeżeli wpisze lolek wynikiem będzie "bolek" jeżeli nie wpisze niczego wynikiem będzie "bolek i lolek".
Bolek i Lolek
#!/bin/bash
if [[ $1 = bolek ]];
then
echo "lolek";
fi
if [[ $1 = lolek ]];
then
echo "bolek";
fi
if [[ $# < 1 ]];
then
echo "bolek i lolek ";
fi
Porównywanie liczb
Do skryptu wprowadzone zostaną jako argumenty dwie liczby. Zostaną one porównane i pojawi się komunikat dotyczący ich zależności wielkości względem siebie.
#!/bin/bash
if [[ $1 > $2 ]];
then
echo "Pierwsza liczba jest wieksza niz druga liczba";
fi
if [[ $1 < $2 ]];
then
echo " Druga liczba jest wieksza niz pierwsza liczba";
fi
if [[ $1 == $2 ]];
then
echo "Obie liczby sa rowne";
fi
if [[ -z $1 ]]
then
echo "Nie podano parametru liczbowego";
fi
if [[ -n $1 ]] && [[ -z $2 ]];
then
echo "Nie podano parametru nr 2";
fi
ciekawe tutaj wpisy!
OdpowiedzUsuńCiekawe i interesujace wpisy
OdpowiedzUsuńwspaniały blok i fajne treści
OdpowiedzUsuńciekawy wpis
OdpowiedzUsuń