Poradnik dla początkujących dotyczący skryptowania powłoki 4 Warunki i instrukcje If-Then
W naszym przewodniku omówiliśmy dość podstawowych tematów dotyczących skryptów powłoki, które warto wypróbować. W tym tygodniu odsyłamy do bardziej zabawnych rzeczy, takich jak warunki i zdania "jeśli-to".
Jakie są warunki?
W języku potocznym mówimy, że warunki są wymogami, które muszą zostać spełnione, aby coś mogło się wydarzyć. Aby mój laptop mógł łączyć się z Internetem, musi być spełniony szereg warunków, takich jak posiadanie dostawcy Internetu, modemu i / lub routera, mojego laptopa, itd. Jest to bardzo proste, a jeśli którekolwiek tych wymagań nie są spełnione, wynik - mój laptop łączący się z Internetem - nie ma miejsca.
Warunki w zakresie obliczeń działają podobnie. Możemy sprawdzić, czy ciąg znaków pasuje do innego ciągu, czy nie pasuje do innego ciągu, czy nawet, jeśli w ogóle istnieje. Podobnie, możemy przetestować argumenty liczbowe, aby sprawdzić, czy jeden jest wielki, mniejszy lub równy drugiemu. Aby coś się wydarzyło po spełnieniu warunków testu, używamy instrukcji "jeśli-to". Ich format jest dość prosty.
jeśli CONDITION
następnie
command1
command2
...
commandn
fi
Jeśli oświadczenia
Zróbmy krótki skrypt testowy, dobrze?
jeśli test $ 1 -gt 2 $
następnie
echo "1 dolar jest większy niż 2 USD"
fi
Zauważysz, że tylko wtedy, gdy warunek jest prawdziwy, skrypt wykona następujące polecenie. W przeciwnym razie instrukcja "if" zostanie zakończona. Jeśli po poleceniu "if" istnieją jakieś komendy, będą one uruchamiane normalnie. Dodałem następujący wiersz na końcu powyższego skryptu, aby to zilustrować:
echo "To jest po instrukcji if"
Oto kilka innych operatorów liczbowych, które możesz wypróbować:
- -eq: równy
- -ne: nie równe
- -lt: mniej niż
- -le: mniejszy lub równy
- -gt: większy niż
- -ge: większy lub równy
Testowanie ciągów
Teraz, jeśli zmienimy pierwszy wiersz naszego skryptu na:
jeśli test 1 $ = 2 $
wtedy warunek sprawdzi, czy oba są równe. Jest tu jednak haczyk !! Użycie znaku równości (=) porównuje dwa ciągi, a nie liczby. Jeśli chcesz porównać liczby, musisz użyć operatora "-eq" podobnie jak użyliśmy "-gt" powyżej.
Teraz, zróbmy kolejną modyfikację:
jeśli test 1 $! = 2 $
Włączenie wykrzyknika (!) Działa jak modyfikator "nie". Oznacza to, że uruchamia następujące polecenie tylko wtedy, gdy dwa ciągi nie pasują do siebie.
Oto lista bardziej opartych na ciągach testów, których możesz użyć:
- string: samo użycie argumentu sprawdza, czy ciąg znaków nie jest pusty (null) lub nie jest zdefiniowany w jakiś sposób
- -n ciąg: sprawdzi, czy łańcuch nie jest pusty i jest zdefiniowany
- -z ciąg: to sprawdzi, czy ciąg znaków jest pusty i jest zdefiniowany w ten sposób
Co innego o tym, jeśli?
Przyznaję, że tytuł sekcji był zdecydowanie kiepski. Ok, wiemy, jak wykonać polecenie, jeśli test jest prawdziwy, ale co jeśli chcemy wykonać inne polecenie, jeśli jest ono fałszywe? Możemy łatwo połączyć te dwa elementy, dodając sekcję do naszych instrukcji "jeśli-to" - "jeszcze"!
jeśli CONDITION
następnie
command1
command2
...
commandn
jeszcze
command1
command2
...
commandn
fi
Zbierzmy prosty skrypt.
Jest wszystko z właściwym wcięciem. Jeśli przyjrzysz się uważnie, zauważysz, że zamiast polecenia testowego użyliśmy nawiasów kwadratowych ([i]). Są one funkcjonalnie ekwiwalentne do naszych celów, a z wielu powodów częściej widzisz nawiasy kwadratowe, więc użyjemy ich od teraz.
Oto, jak będą wyglądały dane wyjściowe:
To takie proste!
Co mam teraz zrobić?
Teraz, gdy umiesz używać instrukcji "if-then-else", możesz uruchamiać skrypty, które mogą wykonywać testy. Na przykład możesz uruchomić skrypt, który obliczy mieszanie md5 pliku, a następnie porówna go z plikiem pobranym w pliku, aby sprawdzić, czy pasują do siebie..
W przypadku niektórych punktów bonusowych można utworzyć skrypt, który ma pętlę "dla", ale wykorzystuje warunki testu zamiast odczytywać linie z pliku listy ...
Przechodzimy do kilku ciekawszych części w naszym Przewodniku dla Początkujących w Skrypcie Shell. Jeśli przegapiłeś poprzednie lekcje, oto krótka lista do sprawdzenia:
- Podstawy skryptowania powłoki
- Korzystanie z pętli
- Więcej podstawowych poleceń
- Jakie są różnice między powłokami Linuksa?
- Jak korzystać z podstawowych wyrażeń regularnych
Jeśli stworzyłeś lub użyłeś skryptów, które używają warunków testowania, instrukcji if-then-else i pętli "for", podziel się z nami komentarzami!