Pisząc skrypty w Bash, nie tylko doświadczeni programiści, ale także nowicjusze w powłoce Bash mają do czynienia z pracą z ciągami. Jest to najczęściej potrzebne podczas odczytywania poleceń wprowadzanych przez użytkownika jako argumenty do skryptu wykonywalnego oraz podczas przetwarzania plików tekstowych. Jedną z niezbędnych sztuczek w tym przypadku jest porównanie ciągów.

W tym artykule przyjrzymy się porównywaniu ciągów Bash, a także niektórym niuansom korzystania z operacji porównania i rozwiązywaniu typowych błędów.

Te operacje pozwalają określić, czy porównywane ciągi są takie same:

  • = - na przykład równy if [ "$x" = "$y" ]
  • == - synonim operatora „=”, na przykład if [ "$x" == "$y" ]
  • != - na przykład nie to samo if [ "$x" != "$y" ]

#!/kosz/bash
testuser=anton
if [ $USER = $testuser ]
następnie
echo "Witaj $testobiorcy"
fi

Wynik skryptu:

Podczas sprawdzania równości z poleceniem test(jednoznaczne z nawiasami kwadratowymi ) brane są pod uwagę wszystkie różnice w interpunkcji i wielkości liter w porównywanych ciągach.

Niektóre cechy dopasowywania ciągów do wzorów:

# zwraca prawdę, jeśli łańcuch zawarty w $x zaczyna się od "y"
[[ $x == y* ]]
# zwraca prawdę, jeśli ciąg $x to dokładnie dwa znaki "y*"
[[ $x == "y*" ]]
# zwraca prawdę, jeśli $x zawiera nazwę pliku zawartego w bieżącym katalogu, który zaczyna się od "y"
[ $x == y* ]
# zwraca prawdę, jeśli łańcuch $x jest równy dwóm znakom "y*"
[ "$x" == "y*" ]

Na przykład sprawdzanie ciągu bash, aby zobaczyć, czy zaczyna się od y:

#!/kosz/bash
x=yandex
[[ $x == y* ]]
echo $?

Wynik wykonania kodu:

Skrypt zwraca 0 (zero), ponieważ poprosiliśmy o kod błędu ostatniej wykonanej instrukcji. Kod 0 oznacza, że ​​skrypt działał bez błędów. Rzeczywiście, zmienna $x zawiera ciąg Yandex, który zaczyna się od znaku „y”. W przeciwnym razie można wpisać „1”. Jest to bardzo przydatny sposób debugowania skryptów.

Porównywanie ciągów alfabetycznie w Bash

Zadanie staje się bardziej skomplikowane, gdy próbujemy określić, czy ciąg jest poprzednikiem innego ciągu w rosnącej kolejności sortowania. Osoby piszące skrypty w powłoce bash często napotykają dwa problemy dotyczące operacji większych i mniejszych niż w przypadku porównań ciągów linuksowych, które mają dość proste rozwiązania:

Po pierwsze, znaki „większe niż” i „mniejsze niż” muszą zostać zmienione przez dodanie przed nimi ukośnika odwrotnego (\), ponieważ w przeciwnym razie będą one traktowane przez powłokę jako znaki przekierowania, a ciągi jako nazwy plików. To jeden z tych przypadków, w których wyśledzenie błędu jest dość trudne.

#!/kosz/bash
# nieprawidłowe użycie operatorów porównywania ciągów
val1=baseball
val2=hokej
if [ $wartość1 > $wartość2 ]
następnie

w przeciwnym razie

fi

Co się stanie, jeśli porównasz ciągi bash:

Jak widać, sam symbol „większe niż”, w swojej bezpośredniej formie, dawał błędne wyniki, chociaż nie generowano błędów. W tym przypadku ten znak spowodował przekierowanie strumienia wyjściowego, więc nie znaleziono błędów składniowych i w rezultacie plik o nazwie hokej:

Aby naprawić ten błąd, musisz zmienić znak „>”, aby warunek wyglądał tak:

...
if [ $wartość1 \> $wartość2 ]
...

Wtedy wynik programu będzie poprawny:

Po drugie, ciągi uporządkowane za pomocą operatorów „większe niż” i „mniejsze niż” są ułożone inaczej niż to ma miejsce w przypadku polecenia sortować. W tym przypadku problemy są trudniejsze do rozpoznania i mogą w ogóle nie wystąpić, jeśli porównanie nie uwzględnia wielkości liter. W zespole sortować oraz test Porównanie jest inne:

#!/kosz/bash
val1=Testowanie
val2=testowanie
if [ $wartość1 \> $wartość2 ]
następnie
echo "$wartość1 jest większa niż $wartość2"
w przeciwnym razie
echo "$wartość1 jest mniejsza niż $wartość2"
fi

Wynik kodu:

W zespole test ciągi pisane wielkimi literami będą najpierw poprzedzać ciągi pisane małymi literami. Ale jeśli te same dane są zapisywane do pliku, do którego następnie zastosuj polecenie sortować, najpierw pojawią się napisy z małymi literami:

Różnica między ich pracą polega na tym, że test do ustalenia porządku sortowania przyjmuje się układ znaków według tablicy ASCII. W sortować używa również kolejności sortowania określonej dla ustawień językowych ustawień regionalnych.

Sprawdzanie ciągu pod kątem pustej wartości

Porównanie za pomocą operatorów -z oraz -n służy do określenia, czy zmienna zawiera treść. W ten sposób możesz znaleźć puste linie w bash. Przykład:

#!/kosz/bash
wart1=testowanie
wart2=""
# sprawdza, czy ciąg jest pusty
if [ -n $wartość1 ]
następnie
echo "Ciąg "$wartość1" nie jest pusty"
w przeciwnym razie
echo "Ciąg "$wartość1" jest pusty"
fi
# sprawdza, czy ciąg jest pusty
if [ -z $wartość2 ]
następnie
echo "Ciąg "$wartość2" jest pusty"
w przeciwnym razie
echo "Ciąg "$wartość2" nie jest pusty"
fi
if [ -z $wartość3 ]
następnie
echo "Ciąg "$wartość3" jest pusty"
w przeciwnym razie
echo "Ciąg "$wartość3" nie jest pusty"
fi

Wynik kodu:

Ten przykład tworzy dwie zmienne łańcuchowe — wart1 oraz wart2. Operacja -n określa, czy zmienna ma wart1 niezerowa długość oraz -z czeki wart2 oraz wart3 do zera. Warto zauważyć, że ta ostatnia nie została zdefiniowana do momentu porównania, ale interpretator uważa, że ​​jej długość jest nadal równa zero. Ten niuans należy wziąć pod uwagę w różnych kontrolach scenariuszy. A jeśli nie masz pewności, jaka wartość jest zawarta w zmiennej i czy w ogóle jest ustawiona, powinieneś to sprawdzić za pomocą operatora -n lub -z i dopiero wtedy używaj go zgodnie z jego przeznaczeniem.

Warto zwrócić uwagę na funkcję -n. Jeśli do testu zostanie przekazana niezadeklarowana lub pusta zmienna, zwróci ona prawdę, a nie fałsz. W takich przypadkach należy umieścić sprawdzany ciąg (zmienną) w podwójnych cudzysłowach, aby wyglądał tak:

...
if [ -n "$wartość1" ]
...

wnioski

Istnieją pewne niuanse w przedstawionych operacjach porównywania ciągów Bash, które warto zrozumieć, aby zapobiec błędom skryptowym. Ale w praktyce jest wiele takich sytuacji, więc zapamiętywanie wszystkiego (a tym bardziej opisywanie) nie zadziała.

warunek if-else stosowany w skryptach BASH Często. Sam warunek ma nieco dziwną formę [[ warunek ]]. Zwróć uwagę na wcięcia. Bez nich warunek nie zadziała. Podaję listę operatorów logicznych dla warunku [[ ? ]]:

Lista operatorów logicznych, które
używane dla konstrukcji if-then-else-fi

#!/bin/bash if [[ $1 > 2 ]] then # if [[ ? ]] echo $1" większe niż 2" else # jeśli nie prawda echo $1" mniejsze niż 2 lub 2" fi

Niektórzy z was uznają operator równości -eq za dziwny. Spróbuj użyć znajomych operatorów >

Załóżmy, że masz skrypt i wymagana jest weryfikacja użytkownika. Jeśli użytkownik nie jest rootem, skrypt zostanie zatrzymany.

#!/bin/bash if [ "$(whoami)" != "root" ]; następnie echo "Nie masz uprawnień do uruchomienia $0." wyjście1; fi

Często trzeba sprawdzić zmienną pod kątem wartości. Jeśli w zmiennej nie ma nic, możesz zatrzymać skrypt.

#!/bin/bash if [ -n "$liczba" ]; wtedy "zmienna ma coś i możesz rozpocząć kolejny proces" else echo "pusta zmienna, zatrzymaj skrypt" exit 0; fi

Jeśli zmienna jest pusta, można ją wypełnić.

#!/bin/bash if [ -z "$liczba" ]; wtedy echo "zmienna jest pusta" num=1 w przeciwnym razie echo "num="$num fi

Pusta zmienna może mieć przypisaną wartość domyślną. Ten wpis jest krótszy niż w poprzednim przykładzie.

#!/bin/bash # Napisz DOMYŚLNE, jeśli nie ma argumentów wiersza poleceń [ -z "$arg1" ] && arg1=DOMYŚLNE echo $arg1

W skryptach powłoki Bash możemy dokonywać porównań liczbowych. Aby wykonać operację porównywania liczb w Bash, należy użyć stanu „test” w pętli if lub . W tym poście powiemy Ci, jak porównywać liczby w bash.

Operatory do porównywania liczb bash

operatorco on robiprzykład
-równeporównaj cyfry w bash pod kątem równości, zwraca 0, jeśli są równeif [ $a -eq $b ] then
-geporównywanie liczb w bash, jeśli są większe lub równe. Wynik zwraca 0, jeśli jest większy lub równyif [ $a -ge $b ] then
-gtporównuje liczby w bash, jeśli są większe niż.if [ $a -gt $b ] then
-leporównuje liczby w bash, jeśli są mniejsze lub równe.if [ $a -le $b ] then
-ltporównuje liczby w bash, jeśli mniej.if [ $a -lt $b ] then
-neporównuje liczby w bash, jeśli nie są równe lub nie.if [ $a -ne $b ] then

Szczegółowe przykłady operatorów porównywania liczb w Bash:

1. operator-równe

Ten operator porównuje liczby, sprawdza, czy wartość jest równa, czy nie. Jeśli jest równy, zwracane jest 0.

# cat test.sh #!/bin/bash echo "wprowadź wartość zmiennej" przeczytaj echo "wpisz wartość zmiennej" przeczytaj b if [ $a -eq $b ] then echo "Zwróć wartość:: $?" echo "a i b są równe" else echo "Zwracana wartość::$?" echo "a i b nie są równe" fi #

Wykonanie:

# sh test.sh wprowadź wartość zmiennej 2 wprowadź wartość zmiennej 3 Zwracana wartość:: 1 a i b nie są równe # sh test.sh wprowadź wartość zmiennej 2 wprowadź wartość zmiennej 2 Zwracana wartość:: 0 a i b są równe #

W powyższym przykładzie po raz pierwszy wzięliśmy liczby 2 i 3 i system zwrócił wartość 1, jednak gdy przyjęliśmy te same wartości dla a i b, zmienna zwraca zero.

2. operator-ge

Ten operator porównuje liczby i sprawdza wartości większe lub równe. Jeśli wartość jest większa lub równa, to zwracana jest wartość 0.

# cat test1.sh #!/bin/bash #diff program dla -ge echo "wprowadź wartość zmiennej" odczytaj echo "wprowadź wartość zmiennej b" przeczytaj b if [ $a -ge $b ] then echo "zwróć wartość : :$?" echo "a jest większe lub równe b" else echo "zwróć wartość::$?" echo "a nie jest większe lub równe b" fi #

3. operator -gt

Ten operator porównania liczb przetestuje liczbę, aby była większa. Jeśli wartość jest większa, zwraca 0.

# cat test2.sh #!/bin/bash #differ for -gt b=100 echo "Wprowadź wartość większą niż 100" read a if [ $a -gt $b ] then echo "Bardzo dobrze" else echo "Nie bardzo dobry " fi

4. operator-le

Ten operator porównywania liczb będzie testował wartości mniejsze lub równe. Jeśli jest mniejszy lub równy, zwracana wartość wynosi 0.

#diff program dla -le b=5 echo "wprowadź wartość mniejszą lub równą 5" przeczytaj a if [ $a -le $b ] then echo "poprawnie" else echo "fałsz" fi #

5. operator-lt

Ten operator porównywania liczb przetestuje wartości za mniej. Jeśli liczba jest mniejsza, zwracana wartość wynosi 0.

Porównywanie ciągów znaków w Bash nie sprawia żadnych problemów, dopóki nie pojawi się zadanie porównywania dwóch ciągów bez uwzględniania wielkości liter. Podam kilka opcji rozwiązania problemu, z którego sam korzystam. Cechą tych rozwiązań jest korzystanie tylko z wbudowanych funkcji powłoki Bash.

Najpierw utworzę dwie zmienne str1 i str2 zawierające ciągi do porównania. Zostaną one użyte w poniższych przykładach kodu.

#!/bin/bash str1 = "Ciąg do porównania" str2 = "ciąg do porównania"

Pierwsza wersja porównywania ciągów znaków bez uwzględniania wielkości liter, którą chcę zaproponować, wykorzystuje sterowanie opcjami powłoki za pomocą wbudowanego polecenia shopt.

shopt -s nocasematch [[ $str1 == $str2 ]] && echo "dopasuj" || echo "nie pasuje" shopt -u nocasematch

Następna wersja porównywania ciągów bez rozróżniania wielkości liter opiera się na zasadzie samorzutowania ciągów do wspólnej wielkości liter. Ten wariant kodu działa na Bash w wersji 4 i nowszych. Użycie go we wcześniejszej wersji Bash spowoduje błąd.

Tak więc, aby porównać ciągi rzucane na małe litery, możesz użyć następującego kodu.

[[ " $( słowo1 , ) " == " $( słowo2 , ) " ]] && echo "dopasuj" || echo "nie pasuje"

Jeśli chcesz przekonwertować porównywane ciągi na wielkie litery, możesz użyć następującego kodu.

[[ " $( str1 ^^ ) " == " $( str2 ^^ ) " ]] && echo "dopasuj" || echo "nie pasuje"

Alternatywnie, łańcuchy mogą być wymuszone w momencie deklaracji zmiennej. Odbywa się to za pomocą wbudowanego polecenia Declaration powłoki.

Aby zadeklarować zmienną zawierającą tekst pisany małymi literami, użyj poniższego kodu.

#!/bin/bash define -l str = "Ciąg przypadku wielbłąda"

W wyniku wykonania tego kodu zmienna str będzie zawierała napis pisany małymi literami, mimo że przypisywany napis został zapisany literą wielbłąda. Możesz zmienić wielkość liter w łańcuchu już ustawionym w zmiennej w następujący sposób.

#!/bin/bash str = "Ciąg przypadku wielbłąda" zadeklaruj -l str str = $str echo $str

Aby przekonwertować ciąg na wielkie litery, w powyższym przykładzie kodu należy zmienić wywołanie na polecenie define, używając przełącznika -u zamiast przełącznika -l.

Teraz porównanie ciągów znaków bez rozróżniania wielkości liter za pomocą polecenia define można wykonać w następujący sposób.

zadeklaruj -l str1_l = $str1 zadeklaruj -l str2_l = $str2 [[ $str1_l == $str2_l ]] && echo "dopasuj" || echo "nie pasuje"

Każde z tych porównań ciągów bez uwzględniania wielkości liter może być używane w skryptach Bash. Dlatego jeśli używasz Bash w wersji 4 lub nowszej, możesz wybrać ten, który najbardziej Ci się podoba. Jeśli wersja Bash jest mniejsza niż 4, należy użyć pierwszej opcji, określając opcję nocasematch za pomocą wbudowanej powłoki shopt.

Ten temat jest czwartym tematem w serii języka powłoki bash. Opowie o takich strukturach kontrolnych języka jak instrukcje warunkowe. Ale zanim przejdziemy do ich opisu, należy zastanowić się nad pewnymi niuansami, które sprawią, że rozważenie poniższego materiału będzie bardziej zrozumiałe.
Najpierw spójrzmy, czym jest lista poleceń. Lista poleceń to pojedyncze polecenie, potok lub sekwencja poleceń/potoków oddzielonych jednym z następujących operatorów: ";", "&&", "||", zakończony średnikiem.
; - operator sekwencyjnego wykonywania kilku poleceń. Każde kolejne polecenie rozpoczyna wykonywanie dopiero po zakończeniu poprzedniego (pomyślnie lub nie);
&& - operator wykonania polecenia dopiero po pomyślnym wykonaniu poprzedniego;
|| - instrukcja wykonania polecenia dopiero po błędnym wykonaniu poprzedniego.
Kod sukcesu to 0, a kod błędu nie jest równy zero (w zależności od typu błędu). Nie mylić z popularnymi językami programowania, gdy 1 to prawda, a 0 to fałsz.
Teraz możemy przejść do bezpośredniego rozważenia instrukcji warunkowych.

operator wariantu przypadku

Ogólna składnia instrukcji case to:

wartość przypadku w
szablon1) lista1;;
wzór2 | szablon3) lista2;;
esac

Logiczna kolejność wykonania instrukcji case:
a) przeszukiwany jest pierwszy wzorzec pasujący do wartości;
b) jeśli zostanie znaleziony, wykonywana jest lista odpowiadających mu poleceń, zakończona znakiem „;;”;
c) kontrola jest przekazywana operatorom po zbudowaniu sprawy.
Wzorzec i lista są oddzielone znakiem „)”. Kilka warunków może odpowiadać jednej liście poleceń, w takim przypadku muszą być oddzielone symbolem „|”.
W szablonach można używać znaków „*”, „?”, „”, które zostały opisane w drugim temacie cyklu. Z ich pomocą można zaimplementować instrukcję, która domyślnie działa w instrukcji switch takich języków jak C, PHP.
Podam przykład użycia przypadku:
echo -n "[Przeglądarka uniwersalna] Określ nazwę pliku: "; przeczytaj przypadek pliku "$File" w *.jpg|*.gif|*.png) eog $File ;; *.pdf) wykazać $Plik ;; *.txt) mniej $Plik ;; *.html) firefox $Plik ;; /dev/*) echo "Cóż, to są przerażające pliki." ;; *) echo "Ok, ok - nie tak wszechstronne." echo "Nie znam tego typu pliku. Nie wiem, jak go wyświetlić." ;; esac
Inny przykład użycia konstrukcji case:
echo "Błąd. Do kogo mam wysłać wiadomość?" echo "Do szefa: b" echo "Do współpracowników: c" echo "Do nikogo: dowolny klawisz" przeczytaj przypadek odpowiedzi $odpowiedź w b|B) mail –s "dziennik błędów" boss< error.log;; c|C) mail –s "Help! error log" –c denis nick < error.log;; *) echo "error"; exit;; esac

Warunkowe oświadczenie, jeśli

Ogólna składnia instrukcji if to:

jeśli lista1 to
lista2

fi

W tym miejscu nawiasy kwadratowe wskazują konstrukcje opcjonalne. Logiczna kolejność wykonania instrukcji case:
a) wykonywana jest lista1;
b) jeśli zostanie wykonane bez błędów, to zostanie wykonana lista2. W przeciwnym razie wykonywana jest lista3, a jeśli zakończy się bez błędu, lista4. Jeżeli list3 również zwraca kod błędu, to wykonywana jest lista5;
c) kontrola jest przekazywana operatorom po konstrukcji if.
Podam przykład użycia, jeśli:
if grep -q Bash file then echo "Plik zawiera co najmniej jedno słowo Bash." fi
Kiedy if i then znajdują się w tym samym wierszu, to konstrukcje if i then muszą kończyć się średnikiem. Na przykład:
$jeśli[$? –ne0]; następnie powtórz "Błąd"; fi
Teraz, wiedząc, że można umieścić if i then w tej samej linii, przepiszmy powyższy przykład:
if grep -q Bash plik; następnie echo "Plik zawiera słowo Bash." fi

instrukcja testowa i wyrażenia warunkowe

W powyższym przykładzie zamiast analizowania kodu zakończenia używane jest sprawdzenie warunku. Dwie formy takiego testu są równoważne: wbudowane polecenie test i [warunek]. Na przykład, aby sprawdzić, czy plik istnieje, napisałbyś:
test -e<файл>
lub
[-mi<файл> ]
Jeśli używane są nawiasy kwadratowe, muszą być oddzielone od siebie spacją, ponieważ "[" jest nazwą polecenia, a "]" jest wymaganym ostatnim argumentem do jego zakończenia.
Jeśli warunek zostanie pomyślnie sprawdzony, zwracane jest 0, a jeśli jest fałszywe, kod błędu to 1.
Polecenie test może sprawdzić, czy ciąg jest pusty. Niepusty ciąg daje kod zakończenia 0. Pusty, odpowiednio - 1. Na przykład:
$ test $USER; echo $? 0
Konstrukcja „” jest bardziej wszechstronna niż „”. To rozszerzona wersja polecenia testowego. Wewnątrz tej konstrukcji nie jest wykonywana dodatkowa interpretacja nazw plików i nie jest dokonywane dzielenie argumentów na oddzielne słowa, ale dozwolone jest podstawianie parametrów i poleceń. Na przykład:
file=/etc/passwd if [[ -e $plik ]], a następnie echo „Znaleziono plik hasła”. fi
Konstrukcja „” jest bardziej preferowana niż „”, ponieważ pomoże uniknąć błędów logicznych. Na przykład operatory „&&”, „||”, „<" и ">" Wewnątrz "" są całkowicie poprawne, podczas gdy wewnątrz "" generują komunikaty o błędach.
Konstrukcja „(())” pozwala na obliczenie zawartych w niej wyrażeń arytmetycznych. Jeśli wynik obliczenia wynosi zero, zwracany jest kod błędu. Niezerowy wynik obliczenia daje kod powrotu równy 0. To jest dokładne przeciwieństwo testu i instrukcji „” omówionych powyżej.
Instrukcja if umożliwia zagnieżdżone kontrole:
if echo "Następne *jeśli* jest wewnątrz pierwszego *jeśli*." if [[ $comparison = "integer" ]] then ((a< b)) else [[ $a < $b ]] fi then echo "$a меньше $b" fi

Wyrażenia warunkowe można łączyć za pomocą zwykłych operacji logicznych:
! <выражение>- odmowa;
<выражение1>-a<выражение2>- logiczne AND;
<выражение1>–o<выражение2>- logiczne LUB.

Podstawowe wyrażenia warunkowe dla plików:
-e - plik istnieje;
-f - zwykły plik (nie katalog lub plik urządzenia);
-s - niezerowy rozmiar pliku;
-d - plik jest katalogiem;
-b - plik jest urządzeniem blokowym (dyskietka, cdrom itp.);
-c - plik jest urządzeniem znakowym (klawiatura, modem, karta dźwiękowa itp.);
-p - plik jest potoku;
-h - plik jest dowiązaniem symbolicznym;
-L - plik jest dowiązaniem symbolicznym;
-S - plik jest gniazdem;
-t - plik jest powiązany z urządzeniem końcowym;
-r - plik jest czytelny (dla użytkownika, który uruchomił skrypt);
-w - plik jest zapisywalny (dla użytkownika, który uruchomił skrypt);
-x - plik jest dostępny do wykonania (dla użytkownika, który uruchomił skrypt);
-g - ustawiona flaga (sgid) dla pliku lub katalogu;
-u - (suid) ustawiona jest flaga pliku;
-k - ustawiona flaga lepkiego bitu;
-O - ​​jesteś właścicielem pliku;
-G - należysz do tej samej grupy co plik;
-N - plik został zmodyfikowany od ostatniego odczytu;
plik1 -nt plik2 – plik1 jest nowszy niż plik2;
plik1 -ot plik2 – plik1 jest starszy niż plik2;
plik1 -ef plik2 - plik1 i plik2 są twardymi dowiązaniami do tego samego pliku.

Podstawowe wyrażenia warunkowe do porównywania ciągów:
-z ciąg – długość ciągu wynosi 0;
-n ciąg – długość ciągu nie jest równa 0;
string1 == string2 – ciągi pasują (podobnie do „=”);
linia1 !== linia2 – linie nie pasują (podobnie do „!=”);
linia 1< строка2 – строка1 предшествует строке2 в лексикографическом порядке;
wiersz1 > wiersz2 - wiersz1 następuje po wierszu2 w porządku leksykograficznym.
Arytmetyczne wyrażenie warunkowe ma format:
argument1 operacja argument2 gdzie argumenty są liczbami całkowitymi i dozwolone są następujące operacje:
-eq - równe;
-ne - nie równe;
-lt - mniej;
-le - mniejsze lub równe;
-gt - więcej;
-ge - większe lub równe;
< - меньше (внутри двойных круглых скобок);
<= - меньше или равно (внутри двойных круглых скобок);
> - większe niż (wewnątrz podwójnych nawiasów);
>= - większe lub równe (wewnątrz podwójnych nawiasów).

Przepiszmy poprzedni przykład, używając instrukcji if:
echo "Błąd. Do kogo mam wysłać wiadomość?" echo "Do szefa: b" echo "Do współpracowników: c" echo "Do nikogo: dowolny klawisz" przeczytaj odpowiedź if [ "$odpowiedź" == "b" –o "$odpowiedź" == "B" ]; następnie mail – s "dziennik błędów" szef< error.log; elif [ "$answer" == "c" –o "$answer" == "C" ]; then mail –s "Help! error log" –c denis nick < error.log; else echo "error"; exit; fi

W następnym temacie będę dalej rozważał struktury kontrolne powłoki bash. Mianowicie rozważone zostaną operatory pętli. A teraz czekam na komentarze i krytykę :).

UPD: Dzięki użytkownikowi