logo

Bash Scripting – tapausselostus

Tapausselostus in bash-skriptejä käytetään, kun on tehtävä päätös useista valinnoista. Toisin sanoen se on hyödyllistä, kun lausekkeella voi olla useita arvoja. Tämän menetelmän voidaan nähdä korvaavana useita if-lauseita komentosarjassa. Case-lauseilla on etulyöntiasema if-lauseisiin verrattuna, koska se parantaa koodimme luettavuutta ja niitä on helpompi ylläpitää. Bash-komentosarjan tapauslausekkeet ovat melko samanlaisia ​​​​kuin C-kielen Case-lausekkeet. Mutta toisin kuin C, Bash Case -lause lopettaa haun jatkamisen heti, kun osuma tapahtuu. Yksinkertaisesti sanottuna ne eivät vaadi mitään katkeamislausetta, joka on pakollinen käytettäväksi C:ssä, jotta kuvion etsiminen voidaan lopettaa.

Tapauslausekkeen perussyntaksi on annettu alla,

Syntaksi:



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

Näin tapausselvitys toimii:

cpld vs fpga
  • EXPRESSION>on muuttuja tai arvo, joka arvioidaan eri mallien (tapausten) perusteella vastaavuuden löytämiseksi.
  • Tapauslauseke alkaa avainsanallacase>jota seuraaEXPRESSION>arvioitava.
  • Jokainen tapaus määritellään aPattern_Case>joka edustaa tiettyä arvoa tai mallia, jota verrataanEXPRESSION>.
  • Jokaisen jälkeenPattern_Case>, on suoritettava lausekkeita, josEXPRESSION>vastaa tiettyäPattern_Case>. Nämä lausunnot on merkittySTATEMENTS>.
  • The;;>jokaisen lopussaSTATEMENTS>lohko osoittaa tapauslohkon loppua.
  • The*)>on erikoistapaus, joka tunnetaan oletustapauksena. Jos mikään edellisistä malleista ei vastaaEXPRESSION>,STATEMENTS>alla*)>lohko suoritetaan.
  • Theesac>avainsana merkitsee tapauslausekkeen loppua.
  • Jos kuviota ei löydy, palautustila on nolla. Muussa tapauksessa palautustila on sovitetun mallin tapauksen suoritetun rungon poistumistila.
  • Kuten C tarjoaa oletusavainsanan oletuskäskylle, samoin Bash-tapauslauseessa, voimme käyttää jokerimerkkiä tähtimerkkiä (*) ja määrittää lopullisen mallin tapauksen oletuskirjaimen määrittämiseksi.

Esimerkki 1: Tulosta kuvaus jokaiselle vaihtoehdolle

Tässä esimerkissä komentosarjan avulla käyttäjä voi valita osaston ja näyttää syöttöä vastaavan kuvauksen kaikukomennon avulla. Tässä komentosarjassa olemme määrittäneet DEPARTMENT-muuttujan tietojenkäsittelytieteeksi. Näin ollen ensimmäisen mallitapauksen runko suoritetaan.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on kuvattu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet DEPARTMENT-muuttujan tietotekniikaksi.
  • Nyt käytämme tapausselvitystä.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

406

Esimerkki 2: Useiden kuvioiden käyttäminen

Jokaisessa lauseessa voimme käyttää useita mallitapauksia. Jos lauseke vastaa vähintään yhtä mallitapausta, lauseen runko suoritetaan. Tässä skriptissä olemme määrittäneet DEPARTMENT-muuttujan nimellä Elektroniikka ja viestintä. Kolmannessa mallitapauksessa on kaksi arvoa, jotka erotetaan putken ( | ) -operaattorilla. Siten kolmannen mallitapauksen runko suoritetaan.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokaisesta riveistä on keskusteltu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet DEPARTMENT-muuttujan nimellä Electronics and Communication.
  • Nyt käytämme tapausselvitystä.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

407 Esimerkki 3: silmukoille

Tässä skriptissä olemme määrittäneet luokan kolmen oppilaan osaston taulukossa DEPARTMENT. Toisin sanoen aiomme käsitellä useamman kuin yhden lausekkeen, joka on kuvattu DEPARTMENT-muuttujassa. Useiden lausekkeiden iteroimiseksi voimme käyttää a for silmukkaa.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on kuvattu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet taulukon DEPARTMENT kolmella merkkijonoliteraalilla.
  • Nyt, for-silmukan avulla, iteroimme elementtijoukon yli.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

408

Esimerkki 4: Kysy käyttäjältä Kyllä tai Ei

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on selitetty alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
    • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Käyttäjältä kysytään Oletko opiskelija? [kyllä ​​vai ei].
  • Nyt käyttäjä antaa vastauksen näppäimistön kautta.
  • Vastauksen tulos on käsitelty tapauslausunnon kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja alla olevan komennon avulla.

mikä on gb
./department.sh>

Lähtö:

409

Esimerkki 5: Signaalin lähettäminen prosessiin

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

signals.sh>

2. Lisää skriptiin nämä lauseet:

#!/bin/bash if [ $# -lt 2 ] then echo 'Usage : 

Tapausselostus in bash-skriptejä käytetään, kun on tehtävä päätös useista valinnoista. Toisin sanoen se on hyödyllistä, kun lausekkeella voi olla useita arvoja. Tämän menetelmän voidaan nähdä korvaavana useita if-lauseita komentosarjassa. Case-lauseilla on etulyöntiasema if-lauseisiin verrattuna, koska se parantaa koodimme luettavuutta ja niitä on helpompi ylläpitää. Bash-komentosarjan tapauslausekkeet ovat melko samanlaisia ​​​​kuin C-kielen Case-lausekkeet. Mutta toisin kuin C, Bash Case -lause lopettaa haun jatkamisen heti, kun osuma tapahtuu. Yksinkertaisesti sanottuna ne eivät vaadi mitään katkeamislausetta, joka on pakollinen käytettäväksi C:ssä, jotta kuvion etsiminen voidaan lopettaa.

Tapauslausekkeen perussyntaksi on annettu alla,

Syntaksi:

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

Näin tapausselvitys toimii:

  • EXPRESSION>on muuttuja tai arvo, joka arvioidaan eri mallien (tapausten) perusteella vastaavuuden löytämiseksi.
  • Tapauslauseke alkaa avainsanallacase>jota seuraaEXPRESSION>arvioitava.
  • Jokainen tapaus määritellään aPattern_Case>joka edustaa tiettyä arvoa tai mallia, jota verrataanEXPRESSION>.
  • Jokaisen jälkeenPattern_Case>, on suoritettava lausekkeita, josEXPRESSION>vastaa tiettyäPattern_Case>. Nämä lausunnot on merkittySTATEMENTS>.
  • The;;>jokaisen lopussaSTATEMENTS>lohko osoittaa tapauslohkon loppua.
  • The*)>on erikoistapaus, joka tunnetaan oletustapauksena. Jos mikään edellisistä malleista ei vastaaEXPRESSION>,STATEMENTS>alla*)>lohko suoritetaan.
  • Theesac>avainsana merkitsee tapauslausekkeen loppua.
  • Jos kuviota ei löydy, palautustila on nolla. Muussa tapauksessa palautustila on sovitetun mallin tapauksen suoritetun rungon poistumistila.
  • Kuten C tarjoaa oletusavainsanan oletuskäskylle, samoin Bash-tapauslauseessa, voimme käyttää jokerimerkkiä tähtimerkkiä (*) ja määrittää lopullisen mallin tapauksen oletuskirjaimen määrittämiseksi.

Esimerkki 1: Tulosta kuvaus jokaiselle vaihtoehdolle

Tässä esimerkissä komentosarjan avulla käyttäjä voi valita osaston ja näyttää syöttöä vastaavan kuvauksen kaikukomennon avulla. Tässä komentosarjassa olemme määrittäneet DEPARTMENT-muuttujan tietojenkäsittelytieteeksi. Näin ollen ensimmäisen mallitapauksen runko suoritetaan.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on kuvattu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet DEPARTMENT-muuttujan tietotekniikaksi.
  • Nyt käytämme tapausselvitystä.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

406

Esimerkki 2: Useiden kuvioiden käyttäminen

Jokaisessa lauseessa voimme käyttää useita mallitapauksia. Jos lauseke vastaa vähintään yhtä mallitapausta, lauseen runko suoritetaan. Tässä skriptissä olemme määrittäneet DEPARTMENT-muuttujan nimellä Elektroniikka ja viestintä. Kolmannessa mallitapauksessa on kaksi arvoa, jotka erotetaan putken ( | ) -operaattorilla. Siten kolmannen mallitapauksen runko suoritetaan.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokaisesta riveistä on keskusteltu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet DEPARTMENT-muuttujan nimellä Electronics and Communication.
  • Nyt käytämme tapausselvitystä.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

407 Esimerkki 3: silmukoille

Tässä skriptissä olemme määrittäneet luokan kolmen oppilaan osaston taulukossa DEPARTMENT. Toisin sanoen aiomme käsitellä useamman kuin yhden lausekkeen, joka on kuvattu DEPARTMENT-muuttujassa. Useiden lausekkeiden iteroimiseksi voimme käyttää a for silmukkaa.

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on kuvattu alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
  • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Olemme alustaneet taulukon DEPARTMENT kolmella merkkijonoliteraalilla.
  • Nyt, for-silmukan avulla, iteroimme elementtijoukon yli.
  • Jokainen lauseke on käsitelty tapauslausekkeen kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja.

./department.sh>

Lähtö:

408

Esimerkki 4: Kysy käyttäjältä Kyllä tai Ei

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

department.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on selitetty alla:

  • Skriptin ensimmäinen rivi alkaa shebangilla (#!).
    • Se kehottaa käyttöjärjestelmää käyttämään tiettyä tulkkia komentosarjan jäsentämiseen.
  • Käyttäjältä kysytään Oletko opiskelija? [kyllä ​​vai ei].
  • Nyt käyttäjä antaa vastauksen näppäimistön kautta.
  • Vastauksen tulos on käsitelty tapauslausunnon kautta.
  • Viimeistä riviä esac on käytetty tapauslausekkeen päättämiseen.

4. Tallenna komentosarja ja tee siitä suoritettava.

chmod +x department.sh>

5. Suorita komentosarja alla olevan komennon avulla.

./department.sh>

Lähtö:

409

Esimerkki 5: Signaalin lähettäminen prosessiin

Voit seurata alla olevia ohjeita:

1. Avaa pääte (Ctrl + Alt + T) ja luo komentosarja:

signals.sh>

2. Lisää skriptiin nämä lauseet:

#!/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. Jokainen rivi on selitetty alla:

  • $1 on signaalin numero ja $2 on prosessin tunnus.
  • Käytämme kill-komentoa signaalin välittämiseksi tai lähettämiseksi annetulle prosessitunnukselle.
  • Tämä suorittaa nukkumiskomennon muutaman sekunnin ajan.
  • Valinnaisen viimeisen vertailun runko *) suoritetaan oletustapauksessa.

4. Tallenna skripti.

5. Suorita komentosarja alla olevan komennon avulla.

./signals.sh>

Lähtö:

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


Signalnumber PID' exit fi # Case statement # Signal number (expression) case '' in 1) echo 'Sending SIGHUP signal.....' kill -SIGHUP ;; 2) echo 'Sending SIGINT signal.....' kill -SIGINT ;; 3) echo 'Sending SIGQUIT signal.....' kill -SIGQUIT ;; 4) echo 'Sending SIGKILL signals.....' kill -SIGKILL ;; *) echo 'Signal number has not been processed' ;; esac>

3. Jokainen rivi on selitetty alla:

  • on signaalin numero ja on prosessin tunnus.
  • Käytämme kill-komentoa signaalin välittämiseksi tai lähettämiseksi annetulle prosessitunnukselle.
  • Tämä suorittaa nukkumiskomennon muutaman sekunnin ajan.
  • Valinnaisen viimeisen vertailun runko *) suoritetaan oletustapauksessa.

4. Tallenna skripti.

5. Suorita komentosarja alla olevan komennon avulla.

./signals.sh>

Lähtö:

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