Bash Scripting – Case Statement
En saksuttalelse i bash-skript brukes når en beslutning må tas mot flere valg. Det er med andre ord nyttig når et uttrykk har muligheten til å ha flere verdier. Denne metodikken kan sees på som en erstatning for flere hvis-setninger i et skript. Saksuttalelser har en fordel i forhold til hvis-utsagn fordi det forbedrer lesbarheten til koden vår og de er lettere å vedlikeholde. Kasussetninger i et Bash-skript er ganske lik Kasussetninger på C-språk. Men i motsetning til C, slutter Bash Case-uttalelsen å fortsette søket så snart treffet inntreffer. Med enkle ord, de krever ikke noen break-setning som er obligatorisk for å brukes i C for å slutte å søke etter et mønster videre.
Den grunnleggende syntaksen til en kasussetning er gitt nedenfor,
Syntaks:
case EXPRESSION in Pattern_Case_1) STATEMENTS ;; Pattern_Case_1) STATEMENTS ;; Pattern_Case_N) STATEMENTS ;; *) STATEMENTS ;; esac
Slik fungerer sakserklæringen:
-
EXPRESSION>er variabelen eller verdien som evalueres mot forskjellige mønstre (tilfeller) for å finne samsvar. - Saksuttalelsen starter med nøkkelordet
case>etterfulgt avEXPRESSION>å bli vurdert. - Hvert tilfelle er definert av en
Pattern_Case>som representerer en bestemt verdi eller mønster som skal sammenlignes medEXPRESSION>. - Etter hver
Pattern_Case>, er det uttalelser som skal utføres hvisEXPRESSION>samsvarer med det spesifikkePattern_Case>. Disse uttalelsene er merket medSTATEMENTS>. - De
;;>på slutten av hverSTATEMENTS>blokk indikerer slutten på en saksblokk. - De
*)>er et spesialtilfelle kjent som standardtilfellet. Hvis ingen av de tidligere mønstrene samsvarer medEXPRESSION>, denSTATEMENTS>under*)>blokkering vil bli utført. - De
esac>nøkkelord markerer slutten på saksuttalelsen.
- I tilfelle ingen mønster samsvarer, er returstatusen null. Ellers er returstatusen utgangsstatusen til den utførte kroppen til den matchede mønstersaken.
- På samme måte som C gir standard nøkkelord for standardsetning, på samme måte i Bash-tilfellesetningen, kan vi bruke jokertegn-stjernesymbolet (*) og definere et siste mønster-tilfelle for å definere standard-kasus.
Eksempel 1: Skriv ut en beskrivelse for hvert alternativ
I dette eksemplet lar et script brukeren velge en avdeling og viser en beskrivelse som tilsvarer input ved hjelp av en ekkokommando. I dette skriptet har vi tilordnet DEPARTMENT-variabelen som informatikk. Dermed blir hoveddelen av den første mønstersaken henrettet.
Du kan følge instruksjonene nedenfor:
1. Åpne terminalen (Ctrl + Alt + T) og lag skriptet:
department.sh
2. Legg til disse utsagnene i skriptet:
#!/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. Hver av linjene er beskrevet nedenfor:
- Den første linjen i skriptet starter med shebang (#!).
- Den instruerer operativsystemet til å bruke en bestemt tolk for å analysere skriptet.
- Vi har initialisert en AVDELINGSvariabel som Datavitenskap.
- Nå bruker vi en sakserklæring.
- Hvert uttrykk har blitt håndtert gjennom saksuttalelsen.
- Den siste linjen, esac, er brukt for å avslutte saksuttalelsen.
4. Lagre skriptet og gjør det kjørbart.
chmod +x department.sh
5. Kjør skriptet.
./department.sh
Produksjon:
Eksempel 2: Bruk av flere mønstre tilfeller
I hver klausul kan vi bruke flere mønstertilfeller. Hvis uttrykket samsvarer med minst ett mønster tilfelle, blir kroppen utført av klausulen. I dette skriptet har vi tildelt AVDELINGSvariabelen som Elektronikk og Kommunikasjon. Det tredje mønstertilfellet har to verdier atskilt av røroperatøren ( | ). Dermed blir hoveddelen av den tredje mønstersaken henrettet.
Du kan følge instruksjonene nedenfor:
1. Åpne terminalen (Ctrl + Alt + T) og lag skriptet:
department.sh
2. Legg til disse utsagnene i skriptet:
#!/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. Hver av linjene har blitt diskutert nedenfor:
- Den første linjen i skriptet starter med shebang (#!).
- Den instruerer operativsystemet til å bruke en bestemt tolk for å analysere skriptet.
- Vi har initialisert en AVDELINGSvariabel som Elektronikk og Kommunikasjon.
- Nå bruker vi en sakserklæring.
- Hvert uttrykk har blitt håndtert gjennom saksuttalelsen.
- Den siste linjen, esac, er brukt for å avslutte saksuttalelsen.
4. Lagre skriptet og gjør det kjørbart.
chmod +x department.sh
5. Kjør skriptet.
./department.sh
Produksjon:
Eksempel 3: for Loops
I dette manuset har vi tildelt avdelingen til tre studenter i en klasse i en matrise AVDELING. Vi skal med andre ord behandle mer enn ett uttrykk som er beskrevet i AVDELINGSvariabelen. For å iterere over flere uttrykk, kan vi bruke a for en løkke.
Du kan følge instruksjonene nedenfor:
1. Åpne terminalen (Ctrl + Alt + T) og lag skriptet:
department.sh
2. Legg til disse utsagnene i skriptet:
#!/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. Hver av linjene er beskrevet nedenfor:
- Den første linjen i skriptet starter med shebang (#!).
- Den instruerer operativsystemet til å bruke en bestemt tolk for å analysere skriptet.
- Vi har initialisert en array DEPARTMENT med tre strenge bokstaver.
- Nå, ved hjelp av en for-løkke, itererer vi over utvalget av elementer.
- Hvert uttrykk har blitt håndtert gjennom saksuttalelsen.
- Den siste linjen, esac, er brukt for å avslutte saksuttalelsen.
4. Lagre skriptet og gjør det kjørbart.
chmod +x department.sh
5. Kjør skriptet.
./department.sh
Produksjon:
Eksempel 4: Spør brukeren med Ja eller Nei
Du kan følge instruksjonene nedenfor:
1. Åpne terminalen (Ctrl + Alt + T) og lag skriptet:
department.sh
2. Legg til disse utsagnene i skriptet:
#!/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. Hver av linjene er forklart nedenfor:
- Den første linjen i skriptet starter med shebang (#!).
- Den instruerer operativsystemet til å bruke en bestemt tolk for å analysere skriptet.
- Brukeren blir spurt om Er du student? [Ja eller nei].
- Nå gis et svar fra brukeren via tastaturet.
- Utgangen av svaret har blitt håndtert gjennom en saksuttalelse.
- Den siste linjen, esac, er brukt for å avslutte saksuttalelsen.
4. Lagre skriptet og gjør det kjørbart.
chmod +x department.sh
5. Kjør skriptet ved å bruke kommandoen nedenfor.
./department.sh
Produksjon:
Eksempel 5: Sende signal til en prosess
Du kan følge instruksjonene nedenfor:
1. Åpne terminalen (Ctrl + Alt + T) og lag skriptet:
signals.sh
2. Legg til disse utsagnene i skriptet:
#!/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. Hver av linjene er forklart nedenfor:
- $1 er signalnummeret og $2 er prosess-ID.
- For å sende eller sende et signal til den gitte prosess-IDen bruker vi kill-kommandoen.
- Dette vil kjøre dvalekommandoen i noen sekunder.
- Brødteksten til den valgfrie siste sammenligningen *) vil bli utført i standardtilfellet.
4. Lagre skriptet.
5. Kjør skriptet ved å bruke kommandoen nedenfor.
./signals.sh
Produksjon:
$ sleep 10000 $ ps -a | grep sleep 23277 pts/2 00:00:00 sleep $ ./signals.sh 9 31231 Sending SIGKILL signal $ sleep 10000 Killed
Eksempel 3: for Loops