Welcome to Our Website

Bash Scripting Tutorial-5. If Statements (Polski)

if Statements!

decyzje, decyzje.

wprowadzenie

Bash jeśli polecenia są bardzo przydatne. W tej sekcji naszego samouczka skryptów Bash dowiesz się, w jaki sposób można używać instrukcji if w skryptach Bash, aby pomóc w automatyzacji zadań.

polecenia If (i, ściśle powiązane, case) pozwalają nam podejmować decyzje w naszych skryptach Bash. Pozwalają nam decydować, czy uruchomić kawałek kodu w oparciu o warunki, które możemy ustawić., Polecenia If W połączeniu z pętlami (które przyjrzymy się w następnej sekcji) pozwalają nam tworzyć znacznie bardziej złożone skrypty, które mogą rozwiązywać większe zadania.

podobnie jak to, co przyjrzeliśmy się w poprzednich sekcjach, ich składnia jest bardzo specyficzna, więc pozostań na bieżąco ze wszystkimi małymi szczegółami.

podstawowe polecenie If

podstawowe polecenie if skutecznie mówi, jeśli dany test jest prawdziwy, to wykonuje dany zestaw działań. Jeśli to nieprawda, nie wykonuj tych czynności., Jeśli jest to format poniżej:

Jeśli
To
<polecenia>
fi

wszystko pomiędzy then a fi (jeśli wstecz) zostanie wykonane tylko wtedy, gdy test (między nawiasami kwadratowymi) jest prawdziwy.

spójrzmy na prosty przykład:

if_example.sh

  1. #!/bin / bash
  2. # podstawowa Instrukcja if
  3. if
  4. then
  5. echo Hey to jest duża liczba.,
  6. pwd
  7. fi
  8. date

Podzielmy to:

  • linia 4 – zobaczmy, czy pierwszy argument wiersza poleceń jest większy niż 100
  • linia 6 i 7 – zostanie uruchomiona tylko wtedy, gdy test w linii 4 zwróci true. Możesz mieć tutaj tyle poleceń, ile chcesz.
  • linia 6 – odwrotny ukośnik ( \ ) przed pojedynczym cudzysłowem ( ' ) jest potrzebny, ponieważ pojedynczy cudzysłów ma specjalne znaczenie dla bash i nie chcemy tego specjalnego znaczenia. Ukośnik odwrotny wymyka się specjalnemu znaczeniu, aby uczynić go normalnym zwykłym pojedynczym cytatem.,
  • linia 8-fi sygnalizuje koniec instrukcji if. Wszystkie polecenia po tej operacji będą uruchamiane normalnie.
  • linia 10 – ponieważ polecenie to znajduje się poza instrukcją if, zostanie ono uruchomione niezależnie od wyniku instrukcji if.
  1. . /if_example.sh 15
  2. Pią 5 Lut 9:06:30 2021
  3. ./if_example.sh 150
  4. Hej to duża liczba.
  5. /home/ryan/bin
  6. Pią 5 Lut 9: 06: 30 2021

zawsze dobrą praktyką jest testowanie skryptów z danymi wejściowymi, które obejmują różne możliwe scenariusze.,

Test

nawiasy kwadratowe () w powyższej instrukcji if są w rzeczywistości odniesieniem do polecenia test. Oznacza to, że wszystkie operatory, na które pozwala test, mogą być również używane tutaj. Poszukaj na stronie podręcznika test, aby zobaczyć wszystkie możliwe operatory (jest ich sporo), ale niektóre z bardziej popularnych są wymienione poniżej.

Operator opis
! Wyrażenie wyrażenie jest false.
-N łańcuch Długość łańcucha jest większa niż zero.,
-łańcuch z Długość łańcucha wynosi zero (tzn. jest pusty).
STRING1 = STRING2 STRING1 jest równy STRING2
STRING1 != STRING2 STRING1 nie jest równy STRING2
INTEGER1-eq INTEGER2 INTEGER1 jest liczbowo równy INTEGER2
INTEGER1-gt INTEGER2 INTEGER1 jest liczbowo większy niż INTEGER2
integer1-LT integer2 integer1 jest numerycznie mniejszy niż INTEGER2
plik istnieje i jest katalogiem.,
-plik E istnieje.
-plik r plik istnieje i jest udzielane Prawo odczytu.
-plik s istnieje i jego rozmiar jest większy niż zero (np. nie jest pusty).
-plik w istnieje i jest przyznane prawo zapisu.
-plik x istnieje i jest udzielane pozwolenie na wykonanie.

kilka punktów do odnotowania:

  • = jest nieco inna niż-eq. zwróci false jako = robi porównanie łańcuchów (tj., znak za znak ten sam) natomiast -eq robi porównanie numeryczne znaczenie zwróci true.
  • gdy odwołujemy się do pliku powyżej, mamy na myśli ścieżkę. Pamiętaj, że ścieżka może być bezwzględna lub względna i może odnosić się do pliku lub katalogu.
  • ponieważ jest to tylko odniesienie do testu komend możemy eksperymentować i kłopotać się z testem w linii komend, aby upewnić się, że nasze zrozumienie jego zachowania jest poprawne.
  1. test 001 = 1
  2. echo $?
  3. 1
  4. test 001-eq 1
  5. echo $?,
  6. 0
  7. dotknij myfile
  8. test-s myfile
  9. echo $?
  10. 1
  11. ls /etc> myfile
  12. test-s myfile
  13. echo $?
  14. 0

Podzielmy to:

  • linia 1 – Wykonaj porównanie oparte na łańcuchu. Test nie wyświetla wyniku, więc zamiast tego sprawdzamy jego status zakończenia, co zrobimy w następnej linii.
  • linia 2-zmienna $? posiada status zakończenia poprzedniego polecenia run (w tym przypadku test). 0 oznacza PRAWDA (lub sukces). 1 = FALSE (lub failure).,
  • linia 4 – tym razem wykonujemy porównanie numeryczne.
  • linia 7-Utwórz nowy pusty plik myfile(zakładając, że myfile jeszcze nie istnieje).
  • linia 8 – czy rozmiar myfile jest większy od zera?
  • linia 11-przekierowuje część zawartości do myfile, więc jej rozmiar jest większy niż zero.
  • linia 12-sprawdź ponownie Rozmiar myfile. Tym razem to prawda.

wcięcia

zauważysz, że w powyższej instrukcji if wcięliśmy wcięcia poleceń, które były uruchamiane, jeśli instrukcja była prawdziwa., Jest to określane jako wcięcia i jest ważną częścią pisania dobrego, czystego kodu(w dowolnym języku, nie tylko skryptów Bash). Celem jest poprawa czytelności i utrudnienie nam popełniania prostych, głupich błędów. Nie ma żadnych reguł dotyczących wcięcia w Bash, więc możesz wciąć lub nie wciąć, jak chcesz, a twoje Skrypty nadal będą działać dokładnie tak samo. Gorąco polecam zrobić wcięcia kodu jednak (zwłaszcza jak skrypty stają się większe) w przeciwnym razie będzie to coraz trudniejsze, aby zobaczyć strukturę w skryptach.,

zagnieżdżone wyrażenia If

mówiące o wcięciach. Oto doskonały przykład, kiedy ułatwia Ci życie. Możesz mieć tyle instrukcji if, ile jest to konieczne w skrypcie. Możliwe jest również posiadanie instrukcji if wewnątrz innej instrukcji if. Na przykład, możemy chcieć przeanalizować liczbę podaną w wierszu poleceń w następujący sposób:

Podzielmy ją:

  • linia 4 – wykonaj następujące czynności, tylko jeśli pierwszy argument wiersza poleceń jest większy niż 100.
  • linia 8 – jest to lekka odmiana instrukcji if., Jeśli chcemy sprawdzić wyrażenie, możemy użyć podwójnych nawiasów, tak jak to zrobiliśmy dla zmiennych.
  • linia 10-jest uruchamiana tylko wtedy, gdy oba polecenia if są prawdziwe.

Yo dawg, nie podoba mi się wypowiedź if, więc wstawiłem wypowiedź if wewnątrz twojego Oświadczenia if.

Xzibit

(Xzibit właściwie tego nie powiedział, ale jestem pewien, że by to zrobił, gdyby prowadził skrypt Pimp My Bash.,)

możesz zagnieżdżać tyle, ile chcesz, ale ogólnie rzecz biorąc, jeśli potrzebujesz zagnieżdżać więcej niż 3 poziomy głęboko, powinieneś prawdopodobnie pomyśleć o reorganizacji swojej logiki.

jeśli Else

czasami chcemy wykonać określony zestaw akcji, jeśli instrukcja jest prawdziwa, a inny zestaw akcji, jeśli jest fałszywa. Możemy to dostosować do mechanizmu else.,

if
then
<komendy>
else
<inne komendy>
fi

teraz możemy łatwo odczytać z pliku, jeśli jest dostarczany jako argument wiersza poleceń, w przeciwnym razie odczytywany ze standardowego wejścia.

else.sh

  1. #!/bin / bash
  2. # else przykład
  3. if
  4. then
  5. nl $1
  6. else
  7. nl /dev/stdin
  8. fi

If Elif Else

czasami możemy mieć szereg warunków, które mogą prowadzić do różnych ścieżek.,

if
then
<komendy>
elif
then
<różne komendy>
elser<inne polecenia>
Fi

na przykład może być tak, że jeśli masz 18 lat lub więcej, możesz przejść do strony. Jeśli nie jesteś, ale masz list od rodziców, możesz odejść, ale musisz wrócić przed północą. Inaczej nie możesz iść.

możesz mieć tyle gałęzi elif, ile chcesz. Ostatni else jest również opcjonalny.,

operacje boolowskie

czasami chcemy coś zrobić tylko wtedy, gdy spełnione jest wiele warunków. Innym razem chcielibyśmy wykonać akcję, jeśli spełniony jest jeden z kilku warunków. Możemy je pomieścić za pomocą operatorów logicznych.

  • i – &&
  • lub – ||

na przykład może chcemy wykonać operację tylko wtedy, gdy plik jest czytelny i ma rozmiar większy niż zero.

and.sh

  1. #!,/bin / bash
  2. # i przykład
  3. if&&
  4. then
  5. echo ten plik jest przydatny.
  6. fi

może chcielibyśmy wykonać coś nieco innego, jeśli użytkownikiem jest bob lub andy.

or.sh

  1. #!/bin / bash
  2. # lub przykład
  3. if / /
  4. then
  5. ls-alh
  6. else
  7. ls
  8. fi

Case instrukcje

czasami możemy chcieć pobierać różne ścieżki na podstawie zmiennej pasującej do szeregu wzorców., Moglibyśmy użyć serii oświadczeń if I elif, ale to wkrótce urosłoby do rangi niezauważalnej. Na szczęście istnieje oświadczenie, które może uczynić rzeczy czystszymi., It’s a little hard to explain so here are some examples to illustrate:

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

Here is a basic example:

case.sh

  1. #!,/bin/bash
  2. # przykład przypadku
  3. case $1 in
  4. start)
  5. echo starting
  6. ;;
  7. stop)
  8. Echo stoping
  9. ;;
  10. restart)
  11. Echo restarting
  12. ;;
  13. *)
  14. Echo don\’t know
  15. ;;
  16. ESAC

Let' s break it down:

  • Line 4 – Ta linia rozpoczyna casemechanizm.
  • linia 5-Jeśli $1 jest równe 'start' to wykonaj kolejne akcje. ) oznacza koniec wzoru.,
  • linia 7-koniec tego zbioru wyrażeń identyfikujemy podwójnym dwukropkiem (;;). Następnie należy rozważyć kolejny przypadek.
  • linia 14-pamiętaj, że test dla każdego przypadku jest wzorcem. * Oznacza dowolną liczbę dowolnego znaku. Jest to essentialy catch all if for jeśli żaden z innych przypadków nie pasuje. Nie jest to konieczne, ale jest często używany.
  • linia 17-esac jest case Wstecz i wskazuje, że znajdujemy się na końcu instrukcji case. Wszelkie inne polecenia po tej operacji będą wykonywane normalnie.
  1. . /case.sh start
  2. starting
  3. .,/case.sh restart
  4. restarting
  5. . /case.sh bla
  6. Nie wiem

przyjrzyjmy się teraz nieco bardziej złożonemu przykładowi, w którym wzory są używane nieco bardziej.

podsumowanie

jeśli wykonaj zestaw poleceń, jeśli test jest prawdziwy. w przeciwnym razie, jeśli test nie jest prawdziwy, wykonaj inny zestaw poleceń. elif jeśli poprzedni test zwrócił false, spróbuj tego. && wykonaj i operację. / / Wykonać operację or. case Wybierz zestaw poleceń do wykonania w zależności od ciągu pasującego do określonego wzorca.,
wcięcia wcięcia znacznie ułatwiają odczyt kodu. Staje się coraz ważniejsze, ponieważ skrypty Bash stają się dłuższe. Planując teraz, gdy twoje Skrypty stają się nieco bardziej złożone, prawdopodobnie będziesz chciał poświęcić trochę czasu na myślenie o tym, jak je skonstruujesz przed nurkowaniem.

teraz podejmijmy kilka decyzji.

  • Utwórz skrypt Bash, który będzie przyjmował 2 liczby jako argumenty linii poleceń. Wydrukuje na ekranie większą z dwóch liczb.,
  • Utwórz skrypt Bash, który zaakceptuje plik jako argument wiersza poleceń i przeanalizuje go w określony sposób. np. możesz sprawdzić, czy plik jest wykonywalny lub zapisywalny. Powinieneś wydrukować określoną wiadomość, jeśli jest prawdziwa, a inną, jeśli jest fałszywa.
  • Utwórz skrypt Bash, który wydrukuje wiadomość na podstawie tego, który dzień tygodnia jest (np. „Happy hump day” Na Wedensday, „TGIF” na piątek itp.).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *