Hvordan bruke Bash Case -uttalelsen

Hvordan bruke Bash Case -uttalelsen

Saksuttalelsen brukes vanligvis i bash når du har flere valg å velge mellom. Å bruke det i stedet for nestede if-ests-uttalelser hjelper med å holde bashskriptene lettere å lese og vedlikeholde.

Bash -saken er designet på samme måte som sakserklæringen fra JavaScript og C. I motsetning til Switch -setningen fra C, slutter Bash Case -uttalelsen å søke etter andre kamper så snart den finner en og fullfører uttalelsene som er skrevet for mønsteret.

I denne guiden vil vi forklare hvordan du kan bruke Bash Case -uttalelsen ved å bruke to eksempler og noen scenarier i Ubuntu 22.04.

Syntaks for saksuttalelsen

Hvis du vil forstå hvordan du bruker saksoppgaven, må du forstå syntaksen. Det ser slik ut:

sak $ variabel i
mønster1)
kommandoer
;;
mønster2)
kommandoer
;;
mønster)
kommandoer
;;
*)
kommandoer
;;
Esac

La oss bryte det ned:

  • Det er viktig at du åpner uttalelsen med nøkkelordet "Case" og lukker det med "ESAC" nøkkelordet.
  • Vi bruker den lukkende braketten “)” for å avslutte et mønster.
  • Mønstre som inneholder kommandoer er kjent som klausuler, og de ender med ";;".
  • Du kan bruke en "*" (stjerne) for å definere et standardkasse.
  • Når Case -kommandoen samsvarer med inngangsvariabelen med de definerte mønstrene, blir det tilsvarende kommandokoden til den tilsvarende settet ut til Double Semicolons.
  • Hvis du vil at den samme kommandoen skal utføres for flere mønstre, kan du bruke røroperatøren til å sette sammen mønstrene som sådan:
sak $ variabel i
mønster1 | mønster2)
kommandoer
;;
mønster3 | mønster4)
kommandoer
;;

La oss se på et par eksempler for å forstå denne syntaksen bedre.

Høytider om en måned

For vårt første eksempel, la oss skrive et skript som tar en måned som innspill fra brukeren og svarer med en internasjonal ferie som faller i måneden. “Shopt -S nocasematch”Kommando lar skriptet ditt ignorere saken om innspillet og matche det med sakene uavhengig av det.

#!/bin/bash
#kode for å ignorere saksbegrensninger
Shopt -S nocasematch
#Case uttalelse
ekko "Vennligst skriv inn navnet på en måned"
Les måned
sak $ måned inn
Januar)
Echo "18. januar er National Thesaurus Day"
;;
Februar)
Echo "20. februar er World Social Justice Day"
;;
Mars)
Echo "29. mars er Little Red Wagon Day.""
;;
April)
Echo "1. april er International Pillow Fight Day"
;;
*)
Echo "kunne ikke finne noen ferie i din spesifiserte måned"
Esac

I dette skriptet tar vi navnet en måned fra brukeren og lagrer det i en variabel med navnet "måned". Deretter ved hjelp av sakserklæringen sammenligner vi innspillene med noen forhåndsvalgte måneder og viser deretter den respektive høytiden. Du kan se at hvis koden ikke finner noen kamp i de definerte tilfellene, så har den et ekko utenfor sakene for å vise en annen melding. Og etter det lukker vi casekodestrukturen med "ESAC" nøkkelordet.

Lagre skriptfilen og gå ut av Nano Editor. Kjør skriptet ved hjelp av følgende kommando:

$ bash måned.sh

Du kan se at koden svarte med den aktuelle ferien for innspillet som ble tilpasset med saker, og svarte med ukjent når inngangen var utenfor rekkevidde fra de programmerte sakene.

Det offisielle språket i et land

La oss skrive et skript som bruker de sammensatte tilfellene. For dette eksempelet, la oss skrive et manus som tar et land og skriver ut det offisielle språket i det landet.

#!/bin/bash
#kode for å ignorere saksbegrensninger
Shopt -S nocasematch
#Case uttalelse
ekko "Gå inn i et land:"
Les land
ekko "Det offisielle språket i $ land er"
sak $ land i
Amerika | London)
ekko "engelsk"
;;
Brasil | Portugal | Mexico)
ekko "spansk"
;;
Kina | Singapore | Taiwan)
ekko "mandarin"
;;
*)
ekko "Ukjent"
;;
Esac

Saksuttalelse med heltall

Du kan også opprette sakene der du også må matche innspillet med heltall. La oss lage et skript som tar innspill fra brukerne i området 1-10, og deretter vises hvis nummeret er jevnt eller rart.

#!/bin/bash
#Case uttalelse
ekko "Skriv inn et tall fra 1 til 10:"
Les Num
sak $ num i
“1” | “3” | “5” | “7” | “9”)
ekko “Dine innspill er et oddetall”
;;
“2” | “4” | “6” | “8” | “10”)
ekko “Dine innspill er et jevnt nummer”
;;
*)
ekko “Dine innspill er utenfor det nødvendige området”
;;
Esac

Å kjøre dette skriptet gir deg følgende utdata:

Du kan også teste med de andre tallene.

Sakserklæring med for loop

Du kan bruke saksuttalelsen i For-Loops hvis du vil sjekke flere inngangsverdier mot set-tilfeller. La oss illustrere denne saken ved å skrive et skript som går gjennom alle filene i den gjeldende katalogen og vise filtypen deres.

#!/bin/bash
#for hver fil i den gjeldende katalogen
for fil i $ (ls)
gjøre
#Ekstrakt filtypen
Utvidelse = $ fil ##*.
sak “$ utvidelse” i
sh)
ekko “Bash Script File: $ File”
;;
png)
ekko “PNG Image File: $ File”
;;
tekst)
ekko “Tekstfil: $ fil”
;;
*)
ekko “Ukjent fil”
;;
Esac
Ferdig

Å kjøre dette skriptet går gjennom hver fil i den nåværende aktive katalogen og viser det sammen med filtypen (bare sakene vi spesifiserte). Som du kan se, når vi kjører dette skriptet at vi bare har en fil i den gjeldende katalogen, viser det at sammen med utvidelsen.

Konklusjon

Å gå tilbake til din eldre kode og finne ut hvilken linje som kan være en veldig tungvint oppgave, spesielt hvis den ble skrevet av noen andre. Å legge til det er enda vanskeligere. Å bruke sakserklæringen i bashskriptene dine kan gjøre det veldig enkelt for deg å holde det lesbart gjennom den enkle syntaksen.

Som demonstrert med eksemplene, kan du bruke det med strenger, flere strenger, heltall og for løkker, blant mange andre. Du kan til og med håndtere exit -kodene for programmet ditt med saksuttalelser. Det er veldig allsidig.

Hvis du står overfor noen problemer ved å bruke saksoppgaven, kan du gjerne engasjere oss, så hjelper vi deg gjerne.