Powłoka bash pozwala na wykonywanie prostych operacji arytmetycznych na liczbach całkowitych za pomocą instrukcji let.
Przykład:
$ let suma=2+2
$ echo $suma
4
$ let liczba=$suma*2
$ echo $liczba
8
Składnia polecenia let
pozwala na używanie zmiennych liczbowych bez konieczności poprzedzania ich znakiem $
.
$ let liczba=suma*suma+3
$ let suma++
Dostępne operatory oraz priorytet ich wykonywania są takie same jak w języku C. Dodatkowo, dostępny jest operator **
realizujący potęgowanie.
$ let x=2**10
$ echo $x
1024
Równoważne użyciu polecenia let
jest zastosowanie (( wyrażenie ))
.
Przykłady:
$ a=$((1+2))
$ a=$(($a*$a))
$ a=$((a+1))
$ ((a++))
Proste operacje arytmetyczne można także wykonywać za pomocą instrukcji expr.
Obliczenia o precyzji zmiennopozycyjnej (dla liczb rzeczywistych) można wykonywać za pomocą kalkulatorów bc lub dc
.
Wyrażenia warunkowe realizowane są za pomocą polecenia [ wyrażenie ]
lub polecenie test
.
Wartością zwracaną polecenia jest kod (status programu) 0 w przypadku gdy wyrażenie jest prawdziwe lub 1 gdy wyrażenie jest fałszywe.
Uwaga: wyrażenie [
jest poleceniem, dlatego wszystkie argumenty muszą byc oddzielone spacją.
Porównywanie napisów odbywa się za pomocą argumentów ==
, !=
, <
i >
.
$ [ $SHELL == /bin/bash ] && echo Uzywasz powloki Bash
$ test $USER != root && echo Nie jestes administratorem
Porównując liczby całkowite należy skorzystać z operatorów -eq
((ang. equal) - równe), -ne
((ang. not equal) - nie równe), -lt
((ang. less then) - mniejsze niż),
-gt
((ang. greater than) - większe niż), -le
((ang. less equal) - mniejsze równe) i -ge
((ang. greater equal) - większe równe).
$ [ $RANDOM -lt 16384 ] && echo Reszka || echo Orzel
$ test $(cat /etc/passwd | wc -l) -gt 100 && echo Uzytkownikow jest wiecej niz 100
Wyrażenie warunkowe może tez sprawdzać atrybuty plików:
-e plik | plik istnieje |
---|---|
-f plik | plik istnieje i jest zwykłym plikiem |
-d plik | plik istnieje i jest katalogiem |
-r plik | użytkownik posiada prawo do czytania pliku |
-w plik | użytkownik posiada prawo do zmiany zawartości pliku |
-x plik | użytkownik posiada prawo do wykonywania pliku |
-o plik | użytkownik jest właścicielem pliku |
$ [ -e /etc/passwd ] && echo Plik /etc/passwd istnieje
$ test -d /etc/passwd && echo Plik /etc/passwd jest katalogiem
Dostępne mamy też operatory &&
(AND), ||
(OR) oraz zaprzeczenie !
(NOT) pozwalające łączyć wyrażenia warunkowe w bardziej złożone warunki.
W takim przypadku złożone wyrażenie logiczne należy umieścić w dodatkowych nawiasach [].
$ [[ $(($RANDOM%2)) -eq 1 && ! $USER == root ]] && echo Warunek jest spelniony
$ test ! -w /etc/passwd || $USER != root && echo Nie masz uprawnien do modyfikcaji /etc/passwd lub nie jestes root-em.
Wyrażenia warunkowe znajdują zastosowanie wraz z instrukcją if oraz pętlą while oraz until.