Bash case-opdracht wordt gebruikt om de juiste actie te ondernemen door gegevens te vergelijken, zoals if-statement. Het werkt als een switch-case-statement van andere standaard programmeertalen. Deze opdracht begint met de instructie 'case' en sluit af met de instructie 'esac'. Er wordt geen break-instructie gebruikt in het case-commando en dubbele haakjes (;;) zijn vereist om de instructie(s) voor een bepaalde overeenkomst te vermelden. Deze opdracht breidt de uitdrukking uit en probeert te matchen met het gegeven patroon en de exit-statuscode van deze opdracht zal nul zijn als er geen overeenkomst wordt gevonden. In deze zelfstudie worden enkele veelvoorkomende voorbeelden van case-statements getoond.
Voorbeeld-1: eenvoudige case-statement
Een enkele voorwaardelijke expressie wordt gebruikt in de bash case-opdracht om de uitvoer te genereren op basis van de overeenkomende voorwaarde. Maak een bash-bestand met de naam zaak 1.sh met het volgende bash-script:. Het script zal een stringwaarde aannemen en de waarde matchen met elke expressie. Het volgende script genereert "No Entry Found" als er geen overeenkomende expressie bestaat,
zaak 1.sh
echo "Typ je naam"
lees naam
geval $naam in
jamin)
echo "Je favoriete kleur is blauw" ;;
Fahmida)
echo "Je favoriete drankje is Sprite" ;;
*)
echo "Geen invoer gevonden" ;;
esac
Voer het script uit.
$ bash geval1.shUitgang:
Het bestand wordt hier uitgevoerd met een geldige en ongeldige invoer om de uitvoer te testen.
Voorbeeld-2: instructie met meerdere hoofdletters met pijp
In het bash-script kunnen meerdere hoofdletterexpressies worden toegepast om verschillende soorten instructies uit te voeren. Het pijpsymbool ( | ) kan worden gebruikt om meerdere uitdrukkingen toe te wijzen. Maak een bash-bestand met de naam geval2.sh met het volgende script. Als na het uitvoeren van het script de invoerwaarde overeenkomt met een uitdrukking, wordt de bijbehorende tekstwaarde afgedrukt.
geval2.sh
echo "Typ uw ID-nummer"
lees ID
geval $ID in
65341)
echo "Uw positie is 1e" ;;
97564|88453)
echo "Uw positie is 2e" ;;
45087)
echo "Uw positie is 3e" ;;
*)
echo "Ongeldige ID" ;;
esac
Voer het script uit .
$ bash geval2.shUitgang:
Dit script werkt ook zoals het vorige voorbeeld. Het enige verschil is dat de waarden voor meerdere expressies worden getest voor een enkele uitvoer.
Voorbeeld-3: Hoe te stoppen vanuit case/esac-statementblok
Wanneer de bash case-opdracht wordt gebruikt onder een oneindige lus, moet de exit-opdracht worden gebruikt om de lus te beƫindigen. Dit voorbeeld laat zien hoe dit soort taken kan worden uitgevoerd. Maak een tekstbestand met de naam geval3.sh met het volgende script. Dit script neemt elk nummer van 1 tot 3 als invoer to. Als de invoer 1 is, worden er twee getallen opgeteld, als de invoer 2 is, worden er twee getallen afgetrokken en als het ingevoerde getal 3 is, worden er twee getallen vermenigvuldigd. De uitvoer is "Ongeldige invoer" als het invoernummer meer dan 3 of minder dan 1 of leeg is.
geval3.sh
#!/bin/bash
terwijl (waar)
Doen
a=8
b=4
((x=$a+$b))
((y=$a-$b))
((z=$a*$b))
echo "Type 1 of 2 of 3"
lees antw
geval $ans in
1) echo "De som van $a en $b is $x & exit" ;;
2) echo "De aftrekking van $a en $b is $y & exit" ;;
3) echo "De vermenigvuldiging van $a en $b is $z & exit" ;;
*) echo "Ongeldige invoer"
esac
gedaan
Voer het script uit.
$ bash geval3.shUitgang:
Het script wordt uitgevoerd totdat ctrl+c wordt ingedrukt.
Voorbeeld-4: lege opdrachtregelargumentwaarde controleren
Commandoregelargumentvariabele kan worden gebruikt in de bash case-instructie. Maak een bestand met de naam geval4.sh met het volgende script dat de waarde van de tweede argumentvariabele controleert check.
#!/bin/bashgeval "$2" in
"Ubuntu")
echo "Het tweede argument is $2."
;;
"CentOS")
echo "Het tweede argument is $2."
;;
"")
echo "Het tweede argument is leeg."
;;
esac
Voer het script uit.
$ bash geval4.shUitgang:
Hier wordt het script voor de eerste keer uitgevoerd zonder een tweede opdrachtregelargumentwaarde en de uitvoer toont "Het tweede argument is leeg". Wanneer het script voor de tweede keer wordt uitgevoerd met een tweede opdrachtregelargumentwaarde, wordt er geen uitvoer weergegeven.
Voorbeeld-5: meerdere case-statement op basis van gebruikersinvoer
Maak een bash-bestand met de naam geval5.sh met het volgende script. Het script heeft de naam van de maand nodig als gebruikersinvoer. Als de naam van de maand overeenkomt met een hoofdletterwaarde, wordt een bepaald sms-bericht toegewezen aan de variabele Bericht. Invoerwaarde moet de naam van de volledige maand zijn of de naam van de maand van drie tekens.
geval5.sh
#!/bin/bashecho "Typ de naam van een maand"
lees maand
geval $ maand in
januari|jan*)
Message=" 21 februari is onze internationale moederdag."
;;
februari|feb*)
Message=" 21 februari is onze internationale moederdag."
;;
maart|maart*)
Message = "9 maart is de wereldnierdag."
;;
april|april*)
Message="De huidige maand is niet februari"
;;
mei|mei*)
Message="De huidige maand is februari"
;;
juni|juni*)
Message="De huidige maand is februari"
;;
*)
Message="Geen overeenkomende informatie gevonden"
;;
esac
echo $Bericht
Voer het script uit.
$ bash geval5.shUitgang:
De volgende uitvoer verschijnt voor de invoerwaarde, 'maart' of 'maart'.
Voorbeeld-6: Controleer variabele in de bash case-instructie
Elke tekenreekswaarde kan worden afgedrukt door de waarde van de opdrachtregelargumentvariabele te controleren. Maak een tekstbestand met de naam geval6.sh met het volgende script. In dit voorbeeld wordt de waarde van de eerste argumentvariabele gecontroleerd en als de waarde leeg is, wordt een string, "I like bash programming" afgedrukt.
geval6.sh
#!/bin/bashgeval $1 in
("") echo "Ik hou van bash-programmering";
esac
Voer het script uit.
$ bash geval6.shUitgang:
Dit script wordt uitgevoerd met en zonder eerste argumenten. Er zal geen uitvoer zijn als er geen argumentvariabele in de opdrachtregel wordt doorgegeven.
Conclusie
Verschillende toepassingen van bash case-commando's worden in dit artikel getoond. Als de lezers deze voorbeelden goed oefenen, zal het voor hen gemakkelijker zijn om veel bash-programmeerproblemen op te lossen.