Bash Scripting – Case Statement

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 av EXPRESSION> å bli vurdert.
  • Hvert tilfelle er definert av en Pattern_Case> som representerer en bestemt verdi eller mønster som skal sammenlignes med EXPRESSION> .
  • Etter hver Pattern_Case> , er det uttalelser som skal utføres hvis EXPRESSION> samsvarer med det spesifikke Pattern_Case> . Disse uttalelsene er merket med STATEMENTS> .
  • De ;;> på slutten av hver STATEMENTS> blokk indikerer slutten på en saksblokk.
  • De *)> er et spesialtilfelle kjent som standardtilfellet. Hvis ingen av de tidligere mønstrene samsvarer med EXPRESSION> , den STATEMENTS> 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:

406

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:

407 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:

408

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:

409

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