logo

Bash Scripting - Declaració de cas

Declaració d'un cas en els scripts bash s'utilitza quan s'ha de prendre una decisió en contra d'opcions múltiples. En altres paraules, és útil quan una expressió té la possibilitat de tenir diversos valors. Aquesta metodologia es pot veure com un reemplaçament de diverses declaracions if en un script. Les declaracions de cas tenen un avantatge sobre les declaracions if perquè milloren la llegibilitat del nostre codi i són més fàcils de mantenir. Les declaracions Case en un script Bash són força semblants a les declaracions Case en llenguatge C. Però a diferència de C, la instrucció Bash Case deixa de continuar la cerca tan bon punt es produeix la coincidència. En paraules senzilles, no requereixen cap declaració de ruptura que sigui obligatòria per utilitzar-se en C per deixar de cercar un patró més.

La sintaxi bàsica d'una declaració de cas es mostra a continuació,



Sintaxi:

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

Així és com funciona la declaració del cas:

  • EXPRESSION>és la variable o el valor que s'avalua amb diferents patrons (casos) per trobar una coincidència.
  • La declaració de cas comença amb la paraula claucase>seguit de laEXPRESSION>per ser avaluat.
  • Cada cas està definit per aPattern_Case>que representa un valor o patró específic que cal comparar amb elEXPRESSION>.
  • Després de cadaPattern_Case>, hi ha sentències que s'han d'executar si elEXPRESSION>coincideix amb l'especificitatPattern_Case>. Aquestes afirmacions es denoten ambSTATEMENTS>.
  • El;;>al final de cadascunaSTATEMENTS>bloc indica el final d'un bloc de casos.
  • El*)>és un cas especial conegut com a cas predeterminat. Si cap dels patrons anteriors coincideix ambEXPRESSION>, elSTATEMENTS>sota la*)>s'executarà el bloc.
  • Elesac>paraula clau marca el final de la declaració de cas.
  • En cas que no coincideixi cap patró, l'estat de retorn és zero. En cas contrari, l'estat de retorn és l'estat de sortida del cos executat del cas del patró coincident.
  • Igual que C proporciona la paraula clau predeterminada per a la instrucció predeterminada, de la mateixa manera a la instrucció Bash case, podem utilitzar el símbol d'asterisc de comodí (*) i definir un cas de patró final per definir el cas predeterminat.

Exemple 1: emet una descripció per a cada opció

En aquest exemple, un script permet a l'usuari seleccionar un departament i mostra una descripció corresponent a l'entrada amb l'ajuda d'una ordre d'eco. En aquest guió, hem assignat la variable DEPARTAMENT com a Informàtica. Així, s'executa el cos del primer cas del patró.



Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació es descriu cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una variable DEPARTAMENT com a Informàtica.
  • Ara, estem utilitzant una declaració de cas.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

406

Exemple 2: ús de casos de patrons múltiples

En cada clàusula, podem utilitzar múltiples casos de patró. Si l'expressió coincideix amb almenys un cas de patró, el cos s'executa de la clàusula. En aquest guió, hem assignat la variable DEPARTAMENT com a Electrònica i Comunicació. El tercer cas del patró té dos valors separats per l'operador pipe ( | ). Així, s'executa el cos del tercer cas del patró.

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. Cada una de les línies s'ha comentat a continuació:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una variable DEPARTAMENT com a Electrònica i Comunicació.
  • Ara, estem utilitzant una declaració de cas.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

407 Exemple 3: for Loops

En aquest guió, hem assignat el departament de tres estudiants d'una classe en una matriu DEPARTAMENT. En altres paraules, processarem més d'una expressió que es descriu a la variable DEPARTAMENT. Per iterar sobre diverses expressions, podem utilitzar un bucle for.

si més en java

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació es descriu cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una matriu DEPARTAMENT amb tres literals de cadena.
  • Ara, amb l'ajuda d'un bucle for, estem iterant sobre la matriu d'elements.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

408

Exemple 4: demana a l'usuari amb Sí o No

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

llançar el maneig d'excepcions a Java
department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació s'explica cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
    • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • A l'usuari se li demana que ets estudiant? [sí o no].
  • Ara l'usuari dóna una resposta a través del teclat.
  • La sortida de la resposta s'ha gestionat mitjançant una declaració de cas.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script amb l'ordre següent.

./department.sh>

Sortida:

409

Exemple 5: enviament de senyal a un procés

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

signals.sh>

2. Afegiu aquestes declaracions a l'script:

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

Declaració d'un cas en els scripts bash s'utilitza quan s'ha de prendre una decisió en contra d'opcions múltiples. En altres paraules, és útil quan una expressió té la possibilitat de tenir diversos valors. Aquesta metodologia es pot veure com un reemplaçament de diverses declaracions if en un script. Les declaracions de cas tenen un avantatge sobre les declaracions if perquè milloren la llegibilitat del nostre codi i són més fàcils de mantenir. Les declaracions Case en un script Bash són força semblants a les declaracions Case en llenguatge C. Però a diferència de C, la instrucció Bash Case deixa de continuar la cerca tan bon punt es produeix la coincidència. En paraules senzilles, no requereixen cap declaració de ruptura que sigui obligatòria per utilitzar-se en C per deixar de cercar un patró més.

La sintaxi bàsica d'una declaració de cas es mostra a continuació,

Sintaxi:

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

Així és com funciona la declaració del cas:

  • EXPRESSION>és la variable o el valor que s'avalua amb diferents patrons (casos) per trobar una coincidència.
  • La declaració de cas comença amb la paraula claucase>seguit de laEXPRESSION>per ser avaluat.
  • Cada cas està definit per aPattern_Case>que representa un valor o patró específic que cal comparar amb elEXPRESSION>.
  • Després de cadaPattern_Case>, hi ha sentències que s'han d'executar si elEXPRESSION>coincideix amb l'especificitatPattern_Case>. Aquestes afirmacions es denoten ambSTATEMENTS>.
  • El;;>al final de cadascunaSTATEMENTS>bloc indica el final d'un bloc de casos.
  • El*)>és un cas especial conegut com a cas predeterminat. Si cap dels patrons anteriors coincideix ambEXPRESSION>, elSTATEMENTS>sota la*)>s'executarà el bloc.
  • Elesac>paraula clau marca el final de la declaració de cas.
  • En cas que no coincideixi cap patró, l'estat de retorn és zero. En cas contrari, l'estat de retorn és l'estat de sortida del cos executat del cas del patró coincident.
  • Igual que C proporciona la paraula clau predeterminada per a la instrucció predeterminada, de la mateixa manera a la instrucció Bash case, podem utilitzar el símbol d'asterisc de comodí (*) i definir un cas de patró final per definir el cas predeterminat.

Exemple 1: emet una descripció per a cada opció

En aquest exemple, un script permet a l'usuari seleccionar un departament i mostra una descripció corresponent a l'entrada amb l'ajuda d'una ordre d'eco. En aquest guió, hem assignat la variable DEPARTAMENT com a Informàtica. Així, s'executa el cos del primer cas del patró.

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació es descriu cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una variable DEPARTAMENT com a Informàtica.
  • Ara, estem utilitzant una declaració de cas.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

406

Exemple 2: ús de casos de patrons múltiples

En cada clàusula, podem utilitzar múltiples casos de patró. Si l'expressió coincideix amb almenys un cas de patró, el cos s'executa de la clàusula. En aquest guió, hem assignat la variable DEPARTAMENT com a Electrònica i Comunicació. El tercer cas del patró té dos valors separats per l'operador pipe ( | ). Així, s'executa el cos del tercer cas del patró.

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. Cada una de les línies s'ha comentat a continuació:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una variable DEPARTAMENT com a Electrònica i Comunicació.
  • Ara, estem utilitzant una declaració de cas.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

407 Exemple 3: for Loops

En aquest guió, hem assignat el departament de tres estudiants d'una classe en una matriu DEPARTAMENT. En altres paraules, processarem més d'una expressió que es descriu a la variable DEPARTAMENT. Per iterar sobre diverses expressions, podem utilitzar un bucle for.

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació es descriu cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
  • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • Hem inicialitzat una matriu DEPARTAMENT amb tres literals de cadena.
  • Ara, amb l'ajuda d'un bucle for, estem iterant sobre la matriu d'elements.
  • Cada expressió s'ha gestionat mitjançant la declaració case.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script.

./department.sh>

Sortida:

408

Exemple 4: demana a l'usuari amb Sí o No

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

department.sh>

2. Afegiu aquestes declaracions a l'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. A continuació s'explica cadascuna de les línies:

  • La primera línia de l'script comença amb el shebang (#!).
    • Indica al sistema operatiu que utilitzi un intèrpret particular per analitzar l'script.
  • A l'usuari se li demana que ets estudiant? [sí o no].
  • Ara l'usuari dóna una resposta a través del teclat.
  • La sortida de la resposta s'ha gestionat mitjançant una declaració de cas.
  • L'última línia, esac, s'ha utilitzat per finalitzar la declaració del cas.

4. Deseu l'script i feu-lo executable.

chmod +x department.sh>

5. Executeu l'script amb l'ordre següent.

./department.sh>

Sortida:

409

Exemple 5: enviament de senyal a un procés

Podeu seguir les instruccions que es donen a continuació:

1. Obriu el terminal (Ctrl + Alt + T) i creeu l'script:

signals.sh>

2. Afegiu aquestes declaracions a l'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. A continuació s'explica cadascuna de les línies:

  • $1 és el número de senyal i $2 és l'identificador del procés.
  • Per passar o enviar un senyal a l'identificador de procés donat, utilitzem l'ordre kill.
  • Això executarà l'ordre de repòs durant uns segons.
  • El cos de l'última comparació opcional *) s'executarà en el cas predeterminat.

4. Deseu l'script.

5. Executeu l'script amb l'ordre següent.

./signals.sh>

Sortida:

$ 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. A continuació s'explica cadascuna de les línies:

  • és el número de senyal i és l'identificador del procés.
  • Per passar o enviar un senyal a l'identificador de procés donat, utilitzem l'ordre kill.
  • Això executarà l'ordre de repòs durant uns segons.
  • El cos de l'última comparació opcional *) s'executarà en el cas predeterminat.

4. Deseu l'script.

5. Executeu l'script amb l'ordre següent.

./signals.sh>

Sortida:

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