w tym tutorialu przeprowadzimy Cię przez podstawy Bash statement i pokażemy, jak go używać w skryptach powłoki.
podejmowanie decyzji jest jednym z najbardziej podstawowych pojęć programowania komputerowego. Podobnie jak w każdym innym języku programowania, if
, if..else
, if..elif..else
I zagnieżdżone if
instrukcje w Bash mogą być używane do wykonywania kodu na podstawie określonego warunku.,
if Statement #
Bash conditionals mogą mieć różne formy. Najbardziej podstawoweif
wyrażenie ma następującą postać:
if TEST-COMMANDthen STATEMENTSfi
if
wyrażenie rozpoczyna się od słowa kluczowegoif
, po którym następuje wyrażenie warunkowe ithen
słowo kluczowe. Polecenie kończy się słowem kluczowym fi
.,
JeśliTEST-COMMAND
przetworzy się naTrue
, zostanie wykonanySTATEMENTS
. Jeśli TEST-COMMAND
zwraca False
, nic się nie dzieje, STATEMENTS
zostanie zignorowany.
ogólnie rzecz biorąc, dobrą praktyką jest zawsze wcinanie kodu i oddzielanie bloków kodu pustymi liniami. Większość ludzi decyduje się na użycie 4-przestrzeni lub 2-przestrzeni wcięcia. Wcięcia i puste linie sprawiają, że kod jest bardziej czytelny i uporządkowany.,
spójrzmy na poniższy przykładowy skrypt, który sprawdza, czy dana liczba jest większa niż 10:
#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi
Zapisz kod w pliku i uruchom go z linii poleceń:
bash test.sh
skrypt poprosi Cię o wprowadzenie liczby. Jeśli, na przykład, wprowadzisz 15, polecenie test
zostanie ocenione do true
ponieważ 15 jest większe niż 10, A polecenieecho
wewnątrz klauzulithen
zostanie wykonane.
The variable is greater than 10.
if..,else Instrukcja #
Instrukcja Bash if..else
ma następującą postać:
if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi
Jeśli TEST-COMMAND
ocenia się na True
, zostanie uruchomiony STATEMENTS1
. W przeciwnym razie, jeśli TEST-COMMAND
zwróci False
, zostanie wykonany STATEMENTS2
. Możesz mieć tylko jedną klauzulę else
w oświadczeniu.,
dodajmy klauzulęelse
do poprzedniego przykładowego skryptu:
jeśli uruchomisz kod i podasz liczbę, skrypt wyświetli inny komunikat w zależności od tego, czy liczba jest większa czy mniejsza / równa 10.
jeśli..elif..else Instrukcja #
Instrukcja Bash if..elif..else
ma następującą postać:
if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi
Jeśli TEST-COMMAND1
przekształca się w True
, zostanie uruchomiony STATEMENTS1
., Jeśli TEST-COMMAND2
przetworzy się do True
, zostanie wykonany STATEMENTS2
. Jeśli żadne z poleceń testowych nie zostanie wykonane True
, zostanie wykonane STATEMENTS2
.
możesz mieć jedną lub więcej elif
klauzule w oświadczeniu. Klauzula else
jest opcjonalna.
warunki są oceniane kolejno., Po zwróceniu warunku True
pozostałe warunki nie są wykonywane i kontrola programu przechodzi na koniec instrukcji .
dodajmyelif
klauzulę do poprzedniego skryptu:
zagnieżdżone if Statements #
Bash pozwala zagnieżdżaćif
statements wewnątrzif
statements. Możesz umieścić wiele instrukcji if
wewnątrz innej instrukcji if
.,
poniższy skrypt wyświetli monit o wprowadzenie trzech liczb i wyświetli największą liczbę spośród tych trzech liczb.
oto jak będzie wyglądać wyjście:
Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
case
zamiast zagnieżdżonych.wiele warunków #
logiczne OR
I AND
operatory pozwalają na użycie wielu warunków w poleceniach .,
oto kolejna wersja skryptu do drukowania największej liczby spośród trzech liczb. W tej wersji zamiast zagnieżdżonych poleceń używamy logicznego operatora AND
(&&
).
operatory testowe #
w Bash polecenie test
przyjmuje jedną z następujących form składni:
test EXPRESSION]
aby skrypt był przenośny, preferuj użycie starego testu [
polecenie dostępne we wszystkich powłokach POSIX., Nowa, ulepszona wersja polecenia test
[[
(podwójne nawiasy) jest obsługiwana w większości nowoczesnych systemów przy użyciu Bash, Zsh i Ksh jako domyślnej powłoki.
aby zanegować wyrażenie testowe, użyj logicznego operatora NOT
(!
). Porównując ciągi znaków, Zawsze używaj pojedynczych lub podwójnych cudzysłowów, aby uniknąć problemów z dzieleniem i globalizacją słów.,
Poniżej znajdują się niektóre z najczęściej używanych operatorów:
-
-n
VAR
– True, jeśli długośćVAR
jest większa niż zero. -
-z
VAR
– PRAWDA, jeśliVAR
jest pusty. -
STRING1 = STRING2
– PRAWDA, jeśliSTRING1
ISTRING2
są równe. -
STRING1 != STRING2
– PRAWDA, jeśliSTRING1
ISTRING2
nie są sobie równe., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
– True, jeśliFILE
istnieje i jest katalogiem. -
-e
FILE
– PRAWDA, jeśliFILE
istnieje i jest plikiem, niezależnie od typu (węzeł, katalog, Gniazdo itp.). -
-f
FILE
– PRAWDA, jeśliFILE
istnieje i jest zwykłym plikiem (Nie katalogiem lub urządzeniem).,
podsumowanie #
,if..else
Iif..elif..else
pozwalają kontrolować przepływ wykonywania skryptu Bash przez ocenę podanych warunków.