Bash Scripting – Case Statement

Bash Scripting – Case Statement

Заяву про справу у сценаріях bash використовується, коли потрібно прийняти рішення проти кількох варіантів. Іншими словами, це корисно, коли вираз може мати кілька значень. Цю методологію можна розглядати як заміну кількох операторів if у сценарії. Інструкції Case мають перевагу над операторами if, оскільки це покращує читабельність нашого коду та їх легше підтримувати. Оператори Case у сценарії Bash дуже схожі на оператори Case у мові C. Але на відміну від C, інструкція Bash Case припиняє продовжувати пошук, як тільки відбувається збіг. Простіше кажучи, вони не потребують оператора break, який є обов’язковим для використання в C, щоб припинити подальший пошук шаблону.

Основний синтаксис оператора case наведено нижче,

Синтаксис:

case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac 

Ось як працює оператор case:

  • EXPRESSION> це змінна або значення, яке оцінюється за різними шаблонами (випадками) для пошуку збігу.
  • Інструкція case починається з ключового слова case> а потім EXPRESSION> підлягає оцінці.
  • Кожен випадок визначається a Pattern_Case> який представляє конкретне значення або шаблон, який потрібно порівняти з EXPRESSION> .
  • Після кожного Pattern_Case> , є оператори, які потрібно виконати, якщо EXPRESSION> відповідає конкретному Pattern_Case> . Ці твердження позначаються STATEMENTS> .
  • The ;;> в кінці кожного STATEMENTS> block вказує на кінець блоку case.
  • The *)> є окремим випадком, відомим як випадок за замовчуванням. Якщо жоден із попередніх шаблонів не відповідає EXPRESSION> , STATEMENTS> під *)> блок буде виконано.
  • The esac> Ключове слово позначає кінець оператора case.
  • Якщо шаблон не знайдено, статус повернення дорівнює нулю. В іншому випадку статус повернення є статусом виходу виконаного тіла відповідного шаблону.
  • Подібно до того, як C надає ключове слово за замовчуванням для оператора за замовчуванням, так само в операторі Case Bash ми можемо використовувати символ зірочки підстановки (*) і визначити остаточний регістр шаблону, щоб визначити регістр за замовчуванням.

Приклад 1: Виведіть опис для кожного параметра

У цьому прикладі сценарій дозволяє користувачеві вибрати відділ і показує опис, що відповідає введеним даних за допомогою команди echo. У цьому сценарії ми призначили змінну DEPARTMENT як Computer Science. Таким чином, виконується тіло першого шаблону.

Ви можете дотримуватися наведених нижче інструкцій.

1. Відкрийте термінал (Ctrl + Alt + T) і створіть скрипт:

department.sh 

2. Додайте ці оператори до сценарію:

#!/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. Кожен із рядків описано нижче:

  • Перший рядок у сценарії починається з шиба (#!).
  • Він наказує операційній системі використовувати певний інтерпретатор для аналізу сценарію.
  • Ми ініціалізували змінну DEPARTMENT як Computer Science.
  • Тепер ми використовуємо оператор case.
  • Кожен вираз було оброблено через оператор case.
  • Останній рядок, esac, використовувався для завершення оператора case.

4. Збережіть сценарій і зробіть його виконуваним.

chmod +x department.sh 

5. Запустіть сценарій.

./department.sh 

Вихід:

406

Приклад 2: Використання кількох шаблонів

У кожному пункті ми можемо використовувати декілька випадків шаблону. Якщо вираз збігається принаймні з одним випадком шаблону, тоді виконується тіло пропозиції. У цьому сценарії ми призначили змінну DEPARTMENT як Electronics and Communication. Третій випадок шаблону має два значення, розділених вертикальною рискою ( | ). Таким чином, виконується тіло третього шаблону.

Ви можете дотримуватися наведених нижче інструкцій.

1. Відкрийте термінал (Ctrl + Alt + T) і створіть скрипт:

department.sh 

2. Додайте ці оператори до сценарію:

#!/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. Кожен із рядків обговорювався нижче:

  • Перший рядок у сценарії починається з шиба (#!).
  • Він наказує операційній системі використовувати певний інтерпретатор для аналізу сценарію.
  • Ми ініціалізували змінну DEPARTMENT як Electronics and Communication.
  • Тепер ми використовуємо оператор case.
  • Кожен вираз було оброблено через оператор case.
  • Останній рядок, esac, використовувався для завершення оператора case.

4. Збережіть сценарій і зробіть його виконуваним.

chmod +x department.sh 

5. Запустіть сценарій.

./department.sh 

Вихід:

407 Приклад 3: для циклів

У цьому сценарії ми призначили відділ трьом учням класу в масиві DEPARTMENT. Іншими словами, ми збираємося обробити більше ніж один вираз, описаний у змінній DEPARTMENT. Для повторення кількох виразів ми можемо використовувати цикл for.

Ви можете дотримуватися наведених нижче інструкцій.

1. Відкрийте термінал (Ctrl + Alt + T) і створіть скрипт:

department.sh 

2. Додайте ці оператори до сценарію:

#!/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. Кожен із рядків описано нижче:

  • Перший рядок у сценарії починається з шиба (#!).
  • Він наказує операційній системі використовувати певний інтерпретатор для аналізу сценарію.
  • Ми ініціалізували масив DEPARTMENT трьома рядковими літералами.
  • Тепер за допомогою циклу for ми виконуємо ітерацію по масиву елементів.
  • Кожен вираз було оброблено через оператор case.
  • Останній рядок, esac, використовувався для завершення оператора case.

4. Збережіть сценарій і зробіть його виконуваним.

chmod +x department.sh 

5. Запустіть сценарій.

./department.sh 

Вихід:

408

Приклад 4. Запит користувача з «Так» або «Ні».

Ви можете дотримуватися наведених нижче інструкцій.

1. Відкрийте термінал (Ctrl + Alt + T) і створіть скрипт:

department.sh 

2. Додайте ці оператори до сценарію:

#!/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. Кожен із рядків пояснюється нижче:

  • Перший рядок у сценарії починається з шиба (#!).
    • Він наказує операційній системі використовувати певний інтерпретатор для аналізу сценарію.
  • Користувачеві буде запропоновано Ви студент? [так або ні].
  • Тепер відповідь дається користувачем за допомогою клавіатури.
  • Вихід відповіді було оброблено через оператор case.
  • Останній рядок, esac, використовувався для завершення оператора case.

4. Збережіть сценарій і зробіть його виконуваним.

chmod +x department.sh 

5. Запустіть сценарій за допомогою наведеної нижче команди.

./department.sh 

Вихід:

409

Приклад 5: Надсилання сигналу процесу

Ви можете дотримуватися наведених нижче інструкцій.

1. Відкрийте термінал (Ctrl + Alt + T) і створіть скрипт:

signals.sh 

2. Додайте ці оператори до сценарію:

#!/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. Кожен із рядків пояснюється нижче:

  • $1 — номер сигналу, а $2 — ідентифікатор процесу.
  • Щоб передати або надіслати сигнал заданому ідентифікатору процесу, ми використовуємо команду kill.
  • Це запустить команду сну на кілька секунд.
  • Тіло необов'язкового останнього порівняння *) буде виконано у випадку за замовчуванням.

4. Збережіть сценарій.

5. Запустіть сценарій за допомогою наведеної нижче команди.

./signals.sh 

Вихід:

$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed