logo

Bash-scripting – Case-verklaring

Een casusverklaring in bash-scripts wordt gebruikt wanneer er een beslissing moet worden genomen tegen meerdere keuzes. Met andere woorden, het is handig wanneer een expressie de mogelijkheid heeft om meerdere waarden te hebben. Deze methodologie kan worden gezien als een vervanging voor meerdere if-statements in een script. Case-statements hebben een voorsprong op if-statements omdat het de leesbaarheid van onze code verbetert en ze gemakkelijker te onderhouden zijn. Case-instructies in een Bash-script lijken veel op Case-instructies in de C-taal. Maar in tegenstelling tot C stopt de Bash Case-instructie met het voortzetten van de zoekopdracht zodra de match plaatsvindt. In eenvoudige woorden: ze vereisen geen break-instructie die verplicht moet worden gebruikt in C om verder te stoppen met zoeken naar een patroon.

De basissyntaxis van een case-instructie wordt hieronder gegeven:



Syntaxis:

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

Zo werkt de case-verklaring:

  • EXPRESSION>is de variabele of waarde die wordt geëvalueerd aan de hand van verschillende patronen (gevallen) om een ​​overeenkomst te vinden.
  • De case-instructie begint met het trefwoordcase>gevolgd door deEXPRESSION>te evalueren.
  • Elk geval wordt gedefinieerd door aPattern_Case>dat een specifieke waarde of patroon vertegenwoordigt dat moet worden vergeleken met deEXPRESSION>.
  • Na elkePattern_Case>, er zijn instructies die moeten worden uitgevoerd als deEXPRESSION>komt overeen met het specifiekePattern_Case>. Deze uitspraken worden aangeduid metSTATEMENTS>.
  • De;;>aan het einde van elkSTATEMENTS>blok geeft het einde van een casusblok aan.
  • De*)>is een speciaal geval dat bekend staat als het standaardgeval. Als geen van de voorgaande patronen overeenkomt met deEXPRESSION>, deSTATEMENTS>onder de*)>blok zal worden uitgevoerd.
  • Deesac>trefwoord markeert het einde van de case-instructie.
  • Als er geen patroon overeenkomt, is de retourstatus nul. Anders is de retourstatus de afsluitstatus van de uitgevoerde hoofdtekst van het overeenkomende patroongeval.
  • Net zoals C het standaardsleutelwoord voor de standaardinstructie levert, kunnen we in de Bash case-instructie ook het jokerteken asterisk (*) gebruiken en een laatste patroongeval definiëren om het standaardgeval te definiëren.

Voorbeeld 1: voer een beschrijving uit voor elke optie

In dit voorbeeld kan de gebruiker met een script een afdeling selecteren en met behulp van een echo-commando een beschrijving weergeven die overeenkomt met de invoer. In dit script hebben we de variabele DEPARTMENT toegewezen als Computer Science. De hoofdtekst van het eerste patroongeval wordt dus uitgevoerd.



U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:



#!/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. Elk van de lijnen wordt hieronder beschreven:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een DEPARTMENT-variabele geïnitialiseerd als Computer Science.
  • Nu gebruiken we een casusverklaring.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

subtekenreeks java
./department.sh>

Uitgang:

406

Voorbeeld 2: Cases met meerdere patronen gebruiken

In elke clausule kunnen we meerdere patroongevallen gebruiken. Als de expressie overeenkomt met ten minste één patroongeval, wordt de hoofdtekst van de clausule uitgevoerd. In dit script hebben we de variabele DEPARTMENT toegewezen als Elektronica en Communicatie. Het derde patroongeval heeft twee waarden, gescheiden door de pipe-operator ( | ). De hoofdtekst van het derde patroongeval wordt dus uitgevoerd.

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de lijnen is hieronder besproken:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een DEPARTMENT-variabele geïnitialiseerd als Elektronica en Communicatie.
  • Nu gebruiken we een casusverklaring.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

./department.sh>

Uitgang:

407 Voorbeeld 3: voor lussen

In dit script hebben we de afdeling van drie studenten van een klas toegewezen in een array DEPARTMENT. Met andere woorden: we gaan meer dan één expressie verwerken die wordt beschreven in de DEPARTMENT-variabele. Om meerdere expressies te herhalen, kunnen we een for-lus gebruiken.

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de lijnen wordt hieronder beschreven:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een array DEPARTMENT geïnitialiseerd met drie letterlijke tekenreeksen.
  • Nu herhalen we met behulp van een for-lus de reeks elementen.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

./department.sh>

Uitgang:

408

Voorbeeld 4: Gebruiker vragen met Ja of Nee

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de regels wordt hieronder uitgelegd:

  • De eerste regel in het script begint met de shebang (#!).
    • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • De gebruiker wordt gevraagd: Bent u een student? [Ja of nee].
  • Nu wordt er door de gebruiker een antwoord gegeven via het toetsenbord.
  • De uitvoer van het antwoord is verwerkt via een case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit met behulp van de onderstaande opdracht.

./department.sh>

Uitgang:

409

Voorbeeld 5: Signaal naar een proces verzenden

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

signals.sh>

2. Voeg deze instructies toe aan het script:

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

Een casusverklaring in bash-scripts wordt gebruikt wanneer er een beslissing moet worden genomen tegen meerdere keuzes. Met andere woorden, het is handig wanneer een expressie de mogelijkheid heeft om meerdere waarden te hebben. Deze methodologie kan worden gezien als een vervanging voor meerdere if-statements in een script. Case-statements hebben een voorsprong op if-statements omdat het de leesbaarheid van onze code verbetert en ze gemakkelijker te onderhouden zijn. Case-instructies in een Bash-script lijken veel op Case-instructies in de C-taal. Maar in tegenstelling tot C stopt de Bash Case-instructie met het voortzetten van de zoekopdracht zodra de match plaatsvindt. In eenvoudige woorden: ze vereisen geen break-instructie die verplicht moet worden gebruikt in C om verder te stoppen met zoeken naar een patroon.

De basissyntaxis van een case-instructie wordt hieronder gegeven:

Syntaxis:

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

Zo werkt de case-verklaring:

  • EXPRESSION>is de variabele of waarde die wordt geëvalueerd aan de hand van verschillende patronen (gevallen) om een ​​overeenkomst te vinden.
  • De case-instructie begint met het trefwoordcase>gevolgd door deEXPRESSION>te evalueren.
  • Elk geval wordt gedefinieerd door aPattern_Case>dat een specifieke waarde of patroon vertegenwoordigt dat moet worden vergeleken met deEXPRESSION>.
  • Na elkePattern_Case>, er zijn instructies die moeten worden uitgevoerd als deEXPRESSION>komt overeen met het specifiekePattern_Case>. Deze uitspraken worden aangeduid metSTATEMENTS>.
  • De;;>aan het einde van elkSTATEMENTS>blok geeft het einde van een casusblok aan.
  • De*)>is een speciaal geval dat bekend staat als het standaardgeval. Als geen van de voorgaande patronen overeenkomt met deEXPRESSION>, deSTATEMENTS>onder de*)>blok zal worden uitgevoerd.
  • Deesac>trefwoord markeert het einde van de case-instructie.
  • Als er geen patroon overeenkomt, is de retourstatus nul. Anders is de retourstatus de afsluitstatus van de uitgevoerde hoofdtekst van het overeenkomende patroongeval.
  • Net zoals C het standaardsleutelwoord voor de standaardinstructie levert, kunnen we in de Bash case-instructie ook het jokerteken asterisk (*) gebruiken en een laatste patroongeval definiëren om het standaardgeval te definiëren.

Voorbeeld 1: voer een beschrijving uit voor elke optie

In dit voorbeeld kan de gebruiker met een script een afdeling selecteren en met behulp van een echo-commando een beschrijving weergeven die overeenkomt met de invoer. In dit script hebben we de variabele DEPARTMENT toegewezen als Computer Science. De hoofdtekst van het eerste patroongeval wordt dus uitgevoerd.

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de lijnen wordt hieronder beschreven:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een DEPARTMENT-variabele geïnitialiseerd als Computer Science.
  • Nu gebruiken we een casusverklaring.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

./department.sh>

Uitgang:

406

Voorbeeld 2: Cases met meerdere patronen gebruiken

In elke clausule kunnen we meerdere patroongevallen gebruiken. Als de expressie overeenkomt met ten minste één patroongeval, wordt de hoofdtekst van de clausule uitgevoerd. In dit script hebben we de variabele DEPARTMENT toegewezen als Elektronica en Communicatie. Het derde patroongeval heeft twee waarden, gescheiden door de pipe-operator ( | ). De hoofdtekst van het derde patroongeval wordt dus uitgevoerd.

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de lijnen is hieronder besproken:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een DEPARTMENT-variabele geïnitialiseerd als Elektronica en Communicatie.
  • Nu gebruiken we een casusverklaring.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

./department.sh>

Uitgang:

407 Voorbeeld 3: voor lussen

In dit script hebben we de afdeling van drie studenten van een klas toegewezen in een array DEPARTMENT. Met andere woorden: we gaan meer dan één expressie verwerken die wordt beschreven in de DEPARTMENT-variabele. Om meerdere expressies te herhalen, kunnen we een for-lus gebruiken.

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de lijnen wordt hieronder beschreven:

  • De eerste regel in het script begint met de shebang (#!).
  • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • We hebben een array DEPARTMENT geïnitialiseerd met drie letterlijke tekenreeksen.
  • Nu herhalen we met behulp van een for-lus de reeks elementen.
  • Elke expressie is afgehandeld via de case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit.

./department.sh>

Uitgang:

408

Voorbeeld 4: Gebruiker vragen met Ja of Nee

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

department.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de regels wordt hieronder uitgelegd:

  • De eerste regel in het script begint met de shebang (#!).
    • Het instrueert het besturingssysteem om een ​​bepaalde tolk te gebruiken om het script te parseren.
  • De gebruiker wordt gevraagd: Bent u een student? [Ja of nee].
  • Nu wordt er door de gebruiker een antwoord gegeven via het toetsenbord.
  • De uitvoer van het antwoord is verwerkt via een case-instructie.
  • De laatste regel, esac, is gebruikt om de case-instructie te beëindigen.

4. Sla het script op en maak het uitvoerbaar.

chmod +x department.sh>

5. Voer het script uit met behulp van de onderstaande opdracht.

./department.sh>

Uitgang:

409

Voorbeeld 5: Signaal naar een proces verzenden

U kunt de onderstaande instructies volgen:

1. Open de terminal (Ctrl + Alt + T) en maak het script:

signals.sh>

2. Voeg deze instructies toe aan het script:

#!/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. Elk van de regels wordt hieronder uitgelegd:

  • $1 is het signaalnummer en $2 is de proces-ID.
  • Om een ​​signaal door te geven of te sturen naar het opgegeven proces-ID gebruiken we het kill-commando.
  • Hierdoor wordt het slaapcommando een paar seconden uitgevoerd.
  • De hoofdtekst van de optionele laatste vergelijking *) wordt standaard uitgevoerd.

4. Sla het script op.

5. Voer het script uit met behulp van de onderstaande opdracht.

./signals.sh>

Uitgang:

$ 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. Elk van de regels wordt hieronder uitgelegd:

  • is het signaalnummer en is de proces-ID.
  • Om een ​​signaal door te geven of te sturen naar het opgegeven proces-ID gebruiken we het kill-commando.
  • Hierdoor wordt het slaapcommando een paar seconden uitgevoerd.
  • De hoofdtekst van de optionele laatste vergelijking *) wordt standaard uitgevoerd.

4. Sla het script op.

5. Voer het script uit met behulp van de onderstaande opdracht.

./signals.sh>

Uitgang:

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