Skrypty w języku Bash – opis przypadku
Oświadczenie o sprawie w skryptach bash jest używany, gdy należy podjąć decyzję na podstawie wielu wyborów. Innymi słowy, jest to przydatne, gdy wyrażenie może mieć wiele wartości. Metodologię tę można postrzegać jako zamiennik wielu instrukcji if w skrypcie. Instrukcje case mają przewagę nad instrukcjami if, ponieważ poprawiają czytelność naszego kodu i są łatwiejsze w utrzymaniu. Instrukcje Case w skrypcie Bash są dość podobne do instrukcji Case w języku C. Ale w przeciwieństwie do C, instrukcja Bash Case przestaje kontynuować wyszukiwanie, gdy tylko nastąpi dopasowanie. Krótko mówiąc, nie wymagają żadnej instrukcji break, której użycie jest obowiązkowe w C, aby zatrzymać dalsze wyszukiwanie wzorca.
Poniżej podana jest podstawowa składnia instrukcji case:
Składnia:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac
Oto jak działa opis przypadku:
-
EXPRESSION>to zmienna lub wartość oceniana na podstawie różnych wzorców (przypadków) w celu znalezienia dopasowania. - Instrukcja case zaczyna się od słowa kluczowego
case>po którym następujeEXPRESSION>do oceny. - Każdy przypadek jest zdefiniowany przez a
Pattern_Case>który reprezentuje konkretną wartość lub wzór do porównaniaEXPRESSION>. - Po każdym
Pattern_Case>, istnieją instrukcje do wykonania, jeśliEXPRESSION>pasuje do konkretnegoPattern_Case>. Stwierdzenia te są oznaczone przezSTATEMENTS>. - The
;;>na końcu każdegoSTATEMENTS>blok wskazuje koniec bloku przypadku. - The
*)>jest przypadkiem specjalnym, zwanym przypadkiem domyślnym. Jeśli żaden z poprzednich wzorców nie pasuje doEXPRESSION>,STATEMENTS>pod*)>blok zostanie wykonany. - The
esac>słowo kluczowe oznacza koniec instrukcji case.
- W przypadku braku dopasowania wzorca zwracany jest status zerowy. W przeciwnym razie status powrotu jest statusem wyjścia wykonanej treści dopasowanego przypadku wzorca.
- Podobnie jak C zapewnia domyślne słowo kluczowe dla instrukcji default, podobnie w instrukcji case Bash, możemy użyć symbolu wieloznacznego gwiazdki (*) i zdefiniować ostateczny przypadek wzorca w celu zdefiniowania przypadku domyślnego.
Przykład 1: Wyprowadź opis dla każdej opcji
W tym przykładzie skrypt pozwala użytkownikowi wybrać dział i wyświetla opis odpowiadający wprowadzonym danym za pomocą polecenia echo. W tym skrypcie zmienną DEPARTMENT przypisaliśmy jako Informatyka. W ten sposób wykonywana jest treść pierwszego przypadku wzorca.
Możesz postępować zgodnie z instrukcjami podanymi poniżej:
1. Otwórz terminal (Ctrl + Alt + T) i utwórz skrypt:
department.sh
2. Dodaj te instrukcje do skryptu:
#!/bin/bash DEPARTMENT='Computer Science' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac
3. Poniżej opisano każdą z linii:
- Pierwsza linia skryptu zaczyna się od shebang (#!).
- Instruuje system operacyjny, aby użył określonego interpretera do analizy skryptu.
- Zainicjowaliśmy zmienną DEPARTMENT jako Computer Science.
- Teraz używamy instrukcji case.
- Każde wyrażenie zostało obsłużone poprzez instrukcję case.
- Ostatnia linia, esac, została użyta do zakończenia instrukcji case.
4. Zapisz skrypt i uczyń go wykonywalnym.
chmod +x department.sh
5. Uruchom skrypt.
./department.sh
Wyjście:
Przykład 2: Korzystanie z wielu wzorców
W każdej klauzuli możemy użyć wielu przypadków wzorców. Jeśli wyrażenie pasuje do co najmniej jednego przypadku wzorca, wówczas treść klauzuli zostaje wykonana. W tym skrypcie zmienną DEPARTMENT przypisaliśmy jako Elektronika i Komunikacja. Trzeci przypadek wzorca ma dwie wartości oddzielone operatorem potoku ( | ). W ten sposób wykonywana jest treść trzeciego przypadku wzorca.
Możesz postępować zgodnie z instrukcjami podanymi poniżej:
1. Otwórz terminal (Ctrl + Alt + T) i utwórz skrypt:
department.sh
2. Dodaj te instrukcje do skryptu:
#!/bin/bash DEPARTMENT='Electronics and Communication' echo -n 'Your DEPARTMENT is ' case $DEPARTMENT in 'Computer Science') echo -n 'Computer Science' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication' ;; *) echo -n 'Invalid' ;; esac
3. Poniżej omówiono każdą z linii:
- Pierwsza linia skryptu zaczyna się od shebang (#!).
- Instruuje system operacyjny, aby użył określonego interpretera do analizy skryptu.
- Zainicjowaliśmy zmienną DEPARTMENT jako Elektronika i komunikacja.
- Teraz używamy instrukcji case.
- Każde wyrażenie zostało obsłużone poprzez instrukcję case.
- Ostatnia linia, esac, została użyta do zakończenia instrukcji case.
4. Zapisz skrypt i uczyń go wykonywalnym.
chmod +x department.sh
5. Uruchom skrypt.
./department.sh
Wyjście:
Przykład 3: pętle for
W tym skrypcie przypisaliśmy działy trzem uczniom klasy w tablicy DEPARTAMENT. Inaczej mówiąc, będziemy przetwarzać więcej niż jedno wyrażenie opisane w zmiennej DEPARTMENT. Aby wykonać iterację po wielu wyrażeniach, możemy użyć pętli for.
Możesz postępować zgodnie z instrukcjami podanymi poniżej:
1. Otwórz terminal (Ctrl + Alt + T) i utwórz skrypt:
department.sh
2. Dodaj te instrukcje do skryptu:
#!/bin/bash DEPARTMENT=('Electronics and Communication' 'Computer Science' 'Information Technology') for value in '${DEPARTMENT[@]}' do case $value in 'Computer Science') echo -n 'Computer Science ' ;; 'Electrical and Electronics Engineering' | 'Electrical Engineering') echo -n 'Electrical and Electronics Engineering or Electrical Engineering ' ;; 'Information Technology' | 'Electronics and Communication') echo -n 'Information Technology or Electronics and Communication ' ;; *) echo -n 'Invalid ' ;; esac done 3. Poniżej opisano każdą z linii:
- Pierwsza linia skryptu zaczyna się od shebang (#!).
- Instruuje system operacyjny, aby użył określonego interpretera do analizy skryptu.
- Zainicjowaliśmy tablicę DEPARTMENT trzema literałami łańcuchowymi.
- Teraz za pomocą pętli for iterujemy po tablicy elementów.
- Każde wyrażenie zostało obsłużone poprzez instrukcję case.
- Ostatnia linia, esac, została użyta do zakończenia instrukcji case.
4. Zapisz skrypt i uczyń go wykonywalnym.
chmod +x department.sh
5. Uruchom skrypt.
./department.sh
Wyjście:
Przykład 4: Monituj użytkownika o odpowiedź Tak lub Nie
Możesz postępować zgodnie z instrukcjami podanymi poniżej:
1. Otwórz terminal (Ctrl + Alt + T) i utwórz skrypt:
department.sh
2. Dodaj te instrukcje do skryptu:
#!/bin/bash echo -n 'Are you a student? [yes or no]: ' read response case $response in 'Y' | 'y' | 'YES' | 'Yes' | 'yes') echo -n 'Yes, I am a student.' ;; 'N' | 'n' | 'No' | 'NO' | 'no' | 'nO') echo -n 'No, I am not a student.'; ;; *) echo -n 'Invalid input' ;; esac
3. Poniżej wyjaśniono każdą z linii:
- Pierwsza linia skryptu zaczyna się od shebang (#!).
- Instruuje system operacyjny, aby użył określonego interpretera do analizy skryptu.
- Użytkownik zostanie zapytany: Czy jesteś studentem? [Tak lub nie].
- Teraz odpowiedź jest udzielana przez użytkownika za pomocą klawiatury.
- Dane wyjściowe odpowiedzi zostały omówione za pomocą instrukcji przypadku.
- Ostatnia linia, esac, została użyta do zakończenia instrukcji case.
4. Zapisz skrypt i uczyń go wykonywalnym.
chmod +x department.sh
5. Uruchom skrypt za pomocą poniższego polecenia.
./department.sh
Wyjście:
Przykład 5: Wysyłanie sygnału do procesu
Możesz postępować zgodnie z instrukcjami podanymi poniżej:
1. Otwórz terminal (Ctrl + Alt + T) i utwórz skrypt:
signals.sh
2. Dodaj te instrukcje do skryptu:
#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : $0 Signalnumber PID' exit fi # Case statement # Signal number (expression) case '$1' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP $2 ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT $2 ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT $2 ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL $2 ;; *) echo 'Signal number $1 has not been processed' ;; esac
3. Poniżej wyjaśniono każdą z linii:
- 1 $ to numer sygnału, a 2 $ to identyfikator procesu.
- Do przekazania lub wysłania sygnału do podanego identyfikatora procesu używamy komendy kill.
- Spowoduje to uruchomienie polecenia uśpienia na kilka sekund.
- Treść opcjonalnego ostatniego porównania *) zostanie wykonana w przypadku domyślnym.
4. Zapisz skrypt.
5. Uruchom skrypt za pomocą poniższego polecenia.
./signals.sh
Wyjście:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed
Przykład 3: pętle for