Przejdź do głównej zawartości

Skrypty Bash - Porównania i testy

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. 

WARUNEK INSTRUKCJI IF.

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




Komentarze

Prześlij komentarz

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości