Bash scenarijus – atvejo pareiškimas

Bash scenarijus – atvejo pareiškimas

Bylos pareiškimas in bash scenarijus naudojamas, kai reikia priimti sprendimą prieš kelis pasirinkimus. Kitaip tariant, tai naudinga, kai išraiška gali turėti kelias reikšmes. Ši metodika gali būti vertinama kaip scenarijaus kelių if-teiginių pakaitalas. Atvejo teiginiai turi pranašumą prieš if teiginius, nes jie pagerina mūsų kodo skaitomumą ir juos lengviau prižiūrėti. Atvejo sakiniai Bash scenarijuje yra gana panašūs į Case pareiškimus C kalba. Tačiau skirtingai nei C, Bash Case pareiškimas nustoja tęsti paiešką, kai tik įvyksta atitiktis. Paprastais žodžiais tariant, jiems nereikia jokio lūžio teiginio, kuris yra privalomas naudoti C kalboje, kad būtų nustota toliau ieškoti šablono.

Pagrindinė atvejo sakinio sintaksė pateikta toliau,

Sintaksė:

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

Štai kaip veikia bylos pareiškimas:

  • EXPRESSION> yra kintamasis arba reikšmė, kuri vertinama pagal skirtingus modelius (atvejus), siekiant rasti atitiktį.
  • Atvejo teiginys prasideda raktiniu žodžiu case> po to seka EXPRESSION> būti įvertintas.
  • Kiekvienas atvejis apibrėžiamas a Pattern_Case> kuri reiškia konkrečią vertę arba modelį, kurį reikia palyginti su EXPRESSION> .
  • Po kiekvieno Pattern_Case> , yra pareiškimų, kuriuos reikia vykdyti, jei EXPRESSION> atitinka konkretų Pattern_Case> . Šie teiginiai pažymėti STATEMENTS> .
  • The ;;> kiekvieno pabaigoje STATEMENTS> blokas rodo bylos bloko pabaigą.
  • The *)> yra ypatingas atvejis, žinomas kaip numatytasis atvejis. Jei nė vienas iš ankstesnių modelių neatitinka EXPRESSION> , STATEMENTS> pagal *)> blokas bus vykdomas.
  • The esac> raktinis žodis žymi atvejo teiginio pabaigą.
  • Jei modelis nesutampa, grąžinimo būsena yra lygi nuliui. Kitu atveju grąžinimo būsena yra suderinto šablono atvejo vykdomo korpuso išėjimo būsena.
  • Kaip C suteikia numatytąjį raktinį žodį numatytajam sakiniui, taip pat Bash didžiųjų raidžių sakinyje, galime naudoti pakaitos žvaigždutės simbolį (*) ir apibrėžti galutinį šablono didžiąją ir mažąją raidę, kad apibrėžtume numatytąją raidę.

1 pavyzdys: Išveskite kiekvienos parinkties aprašą

Šiame pavyzdyje scenarijus leidžia vartotojui pasirinkti skyrių ir rodo aprašymą, atitinkantį įvestį, naudojant echo komandą. Šiame scenarijuje kintamąjį DEPARTMENT priskyrėme kaip Computer Science. Taigi, vykdomas pirmojo modelio atvejo korpusas.

Galite vadovautis toliau pateiktomis instrukcijomis:

1. Atidarykite terminalą (Ctrl + Alt + T) ir sukurkite scenarijų:

department.sh 

2. Pridėkite šiuos teiginius prie scenarijaus:

#!/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. Kiekviena eilutė aprašyta toliau:

  • Pirmoji scenarijaus eilutė prasideda shebang (#!).
  • Ji nurodo operacinei sistemai naudoti tam tikrą interpretatorių scenarijui analizuoti.
  • Mes inicijavome DEPARTMENT kintamąjį kaip Computer Science.
  • Dabar mes naudojame atvejo pareiškimą.
  • Kiekviena išraiška buvo tvarkoma per atvejo pareiškimą.
  • Paskutinė eilutė esac buvo naudojama bylos pareiškimui užbaigti.

4. Išsaugokite scenarijų ir padarykite jį vykdomąjį.

chmod +x department.sh 

5. Paleiskite scenarijų.

./department.sh 

Išvestis:

406

2 pavyzdys: kelių šablonų atvejų naudojimas

Kiekviename sakinyje galime naudoti kelis modelio atvejus. Jei išraiška atitinka bent vieną šablono atvejį, tada sakinio kūnas bus vykdomas. Šiame scenarijuje DEPARTMENT kintamąjį priskyrėme kaip Elektronika ir komunikacija. Trečiojo modelio atvejis turi dvi vertes, atskirtas vamzdžio ( | ) operatoriumi. Taigi vykdomas trečiojo modelio atvejo korpusas.

Galite vadovautis toliau pateiktomis instrukcijomis:

1. Atidarykite terminalą (Ctrl + Alt + T) ir sukurkite scenarijų:

department.sh 

2. Pridėkite šiuos teiginius prie scenarijaus:

#!/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. Kiekviena eilutė buvo aptarta toliau:

  • Pirmoji scenarijaus eilutė prasideda shebang (#!).
  • Ji nurodo operacinei sistemai naudoti tam tikrą interpretatorių scenarijui analizuoti.
  • Mes inicijavome DEPARTMENT kintamąjį kaip Elektronika ir komunikacija.
  • Dabar mes naudojame atvejo pareiškimą.
  • Kiekviena išraiška buvo tvarkoma per atvejo pareiškimą.
  • Paskutinė eilutė esac buvo naudojama bylos pareiškimui užbaigti.

4. Išsaugokite scenarijų ir padarykite jį vykdomąjį.

chmod +x department.sh 

5. Paleiskite scenarijų.

./department.sh 

Išvestis:

407 3 pavyzdys: kilpoms

Šiame scenarijuje mes priskyrėme trijų klasės mokinių skyrių masyve DEPARTMENT. Kitaip tariant, apdorosime daugiau nei vieną išraišką, aprašytą kintamajame DEPARTMENT. Norėdami kartoti kelias išraiškas, galime naudoti a for a ciklus.

Galite vadovautis toliau pateiktomis instrukcijomis:

1. Atidarykite terminalą (Ctrl + Alt + T) ir sukurkite scenarijų:

department.sh 

2. Pridėkite šiuos teiginius prie scenarijaus:

#!/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. Kiekviena eilutė aprašyta toliau:

  • Pirmoji scenarijaus eilutė prasideda shebang (#!).
  • Ji nurodo operacinei sistemai naudoti tam tikrą interpretatorių scenarijui analizuoti.
  • Mes inicijavome masyvą DEPARTMENT su trimis eilučių literalais.
  • Dabar, naudodami for-ciklą, kartojame elementų masyvą.
  • Kiekviena išraiška buvo tvarkoma per atvejo pareiškimą.
  • Paskutinė eilutė esac buvo naudojama bylos pareiškimui užbaigti.

4. Išsaugokite scenarijų ir padarykite jį vykdomąjį.

chmod +x department.sh 

5. Paleiskite scenarijų.

./department.sh 

Išvestis:

408

4 pavyzdys: raginti vartotoją taip arba ne

Galite vadovautis toliau pateiktomis instrukcijomis:

1. Atidarykite terminalą (Ctrl + Alt + T) ir sukurkite scenarijų:

department.sh 

2. Pridėkite šiuos teiginius prie scenarijaus:

#!/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. Kiekviena eilutė paaiškinta toliau:

  • Pirmoji scenarijaus eilutė prasideda shebang (#!).
    • Ji nurodo operacinei sistemai naudoti tam tikrą interpretatorių scenarijui analizuoti.
  • Vartotojas raginamas Ar esate studentas? [taip ar ne].
  • Dabar vartotojas atsako per klaviatūrą.
  • Atsakymo išvestis buvo tvarkoma naudojant atvejo pareiškimą.
  • Paskutinė eilutė esac buvo naudojama bylos pareiškimui užbaigti.

4. Išsaugokite scenarijų ir padarykite jį vykdomąjį.

chmod +x department.sh 

5. Paleiskite scenarijų naudodami toliau pateiktą komandą.

./department.sh 

Išvestis:

409

5 pavyzdys: signalo siuntimas procesui

Galite vadovautis toliau pateiktomis instrukcijomis:

1. Atidarykite terminalą (Ctrl + Alt + T) ir sukurkite scenarijų:

signals.sh 

2. Pridėkite šiuos teiginius prie scenarijaus:

#!/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. Kiekviena eilutė paaiškinta toliau:

  • $1 yra signalo numeris, o $2 yra proceso ID.
  • Norėdami perduoti arba išsiųsti signalą nurodytam proceso ID, naudojame komandą kill.
  • Kelias sekundes bus paleista miego komanda.
  • Neprivalomas paskutinis palyginimas *) bus vykdomas numatytuoju atveju.

4. Išsaugokite scenarijų.

5. Paleiskite scenarijų naudodami toliau pateiktą komandą.

./signals.sh 

Išvestis:

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