Welcome to Our Website

Bash Scripting Tutorial-5. Hvis udsagn

hvis udsagn!

beslutninger, beslutninger.

Indledning

Bash hvis udsagn er meget nyttige. I dette afsnit af vores Bash Scripting Tutorial lærer du de måder, du kan bruge, hvis udsagn i dine Bash scripts til at hjælpe med at automatisere opgaver.

Hvis udsagn (og nært beslægtede sagsangivelser) giver os mulighed for at træffe beslutninger i vores Bash-scripts. De giver os mulighed for at beslutte, om vi skal køre et stykke kode baseret på betingelser, som vi måtte indstille., Hvis udsagn kombineret med sløjfer (som vi vil se på i næste afsnit) giver os mulighed for at lave meget mere komplekse scripts, der kan løse større opgaver.som hvad vi har set på i tidligere afsnit, er deres syntaks meget specifik, så hold dig på toppen af alle de små detaljer.

grundlæggende hvis udsagn

en grundlæggende if-erklæring siger effektivt, hvis en bestemt test er sand, skal du udføre et givet sæt handlinger. Hvis det ikke er sandt, skal du ikke udføre disse handlinger., Hvis følgende format nedenfor:

hvis
derefter
<kommandoer>
internet

Noget mellem dengang og internetadgang (hvis baglæns) vil blive udført, kun, hvis testen (mellem firkantede parenteser) er sandt.

lad os se på et simpelt eksempel:

if_example.sh

  1. #!/bin/bash
  2. # Basic if statement
  3. hvis
  4. echo Hey that\’s a large number.,
  5. pwd
  6. internet
  7. dato

Lad os bryde det ned:

  • Line 4 – Lad os se, om den første command line argument er større end 100
  • Linje 6 og 7 – Vil kun blive vist, hvis testen på linje 4 returnerer true. Du kan have så mange kommandoer her, som du vil.
  • linje 6-backslash ( \ ) foran det enkelte citat ( ‘ ) er nødvendigt, da det enkelte Citat har en særlig betydning for bash, og vi ønsker ikke den særlige betydning. Backslash undslipper den særlige betydning for at gøre det til et normalt almindeligt enkelt citat igen.,linje 8-fi signalerer slutningen af if-sætningen. Alle kommandoer efter dette vil blive kørt som normalt.
  • linje 10 – fordi denne kommando er uden for if-sætningen, vil den blive kørt uanset resultatet af if-sætningen.
  1. ./if_example.sh 15
  2. Fre 5 Feb 9:06:30 2021
  3. ./if_example.sh 150
  4. Hey, det er et stort antal.
  5. /home/ryan/bin
  6. Fre 5 Feb 9:06:30 2021

Det er altid god praksis at teste dine scripts med input, der dækker de forskellige scenarier, der er muligt.,

Test

de firkantede parenteser ( ) i if-sætningen ovenfor er faktisk en henvisning til kommandotesten. Det betyder, at alle de operatører, som test tillader, også kan bruges her. Slå op på man-siden for test for at se alle de mulige operatører (der er ganske mange), men nogle af de mere almindelige er angivet nedenfor.

Operator Beskrivelse
! Udtryk udtrykket er falsk.
-n STRING længden af strengen er større end nul.,
-STRING STRING strengens længde er nul (dvs.den er tom).
STRING1 = STRING2 STRING1 er lig med STRING2
STRING1 != STRENG2 STRENG1 er ikke lige til at STRENG2
INTEGER1 -eq INTEGER2 INTEGER1 er numerisk lig med INTEGER2
INTEGER1 -gt INTEGER2 INTEGER1 er numerisk større end INTEGER2
INTEGER1 -lt INTEGER2 INTEGER1 er numerisk mindre end INTEGER2
-d-FIL FIL findes og er en mappe.,
-E fil filen findes.
-R fil filen findes, og den læste tilladelse gives.
-S fil filen findes, og dens størrelse er større end nul (dvs. den er ikke tom).
-FILE fil filen findes, og skrivetilladelsen gives.
-FILE fil filen findes, og kør tilladelsen gives.

Et par punkter at bemærke:

  • = er lidt anderledes -eq. vil returnere falsk som = gør en streng sammenligning (dvs .. , tegn for tegn det samme) hvorimod-E.gør en numerisk sammenligning betydning vil returnere sand.
  • når vi henviser til filen ovenfor, betyder vi faktisk en sti. Husk, at en sti kan være absolut eller relativ og kan henvise til en fil eller en mappe.fordi det kun er en henvisning til kommandotesten, kan vi eksperimentere og fejlfinding med test på kommandolinjen for at sikre, at vores forståelse af dens adfærd er korrekt.
  1. test 001 = 1
  2. echo $?
  3. 1
  4. test 001 -eq 1
  5. echo $?,
  6. 0
  7. touch myfile
  8. test-s myfile
  9. echo $?
  10. 1
  11. ls /etc > myfile
  12. test -s minfil
  13. echo $?
  14. 0

lad os bryde det ned:

  • linje 1 – Udfør en strengbaseret sammenligning. Test udskriver ikke resultatet, så i stedet kontrollerer vi, at det er udgangsstatus, hvilket er, hvad vi vil gøre på næste linje.
  • linje 2-variablen $? holder e .it status for den tidligere køre kommando (i dette tilfælde test). 0 betyder sand (eller succes). 1 = falsk (eller fiasko).,
  • linje 4-Denne gang udfører vi en numerisk sammenligning.
  • linje 7-Opret en ny tom fil myfile (forudsat at myfile ikke allerede findes).
  • linje 8-er størrelsen af myfile større end nul?linje 11-Omdiriger noget indhold til myfile, så det er størrelsen er større end nul.
  • linje 12-Test størrelsen på myfile igen. Denne gang er det sandt.

indrykning

Du vil bemærke, at I if-sætningen ovenfor indrykkede vi de kommandoer, der blev kørt, hvis sætningen var sand., Dette kaldes indrykning og er en vigtig del af at skrive god, ren kode (på ethvert sprog, ikke kun Bash scripts). Målet er at forbedre læsbarheden og gøre det sværere for os at lave enkle, dumme fejl. Der er ikke nogen regler for indrykning i Bash, så du kan indrykke eller ikke indrykke, som du vil, og dine scripts vil stadig køre nøjagtigt det samme. Jeg vil meget anbefale, at du indrykker din kode dog (især da dine scripts bliver større) ellers vil du finde det stadig vanskeligere at se strukturen i dine scripts.,

indlejret hvis udsagn

taler om indrykning. Her er et perfekt eksempel på, hvornår det gør livet lettere for dig. Du kan have så mange hvis udsagn som nødvendigt inde i dit script. Det er også muligt at have en if-erklæring inde i en anden if-erklæring. For eksempel vil vi måske analysere et tal, der er angivet på kommandolinjen som sådan:

lad os bryde det ned:

  • linje 4 – Udfør følgende, kun hvis det første kommandolinjeargument er større end 100.
  • linje 8-Dette er en let variation på if-sætningen., Hvis vi gerne vil tjekke et udtryk, kan vi bruge dobbeltbeslagene, ligesom vi gjorde for variabler.
  • linje 10 – køres kun, hvis begge udsagn er sande.

Yo da .g, jeg besætter dig som if-udsagn, så jeg sætter en if-erklæring inde i din if-erklæring.

(.ibit

((.ibit sagde faktisk ikke det, men jeg er sikker på, at han ville have, hvis han var vært for Pimp My Bash Script.,

Du kan reden så mange hvis udsagn som du vil, men som en generel tommelfingerregel, Hvis du har brug for at reden mere end 3 niveauer dybt, bør du nok tænke på at omorganisere din logik.

hvis ellers

Nogle gange vil vi udføre et bestemt sæt handlinger, hvis en erklæring er sand, og et andet sæt handlinger, hvis det er falsk. Vi kan imødekomme dette med else-mekanismen.,

hvis
derefter
<kommandoer>
andet
<andre kommandoer>
internet

Nu kunne vi nemt læse fra en fil, hvis det er leveret som en command line argument, der ellers læser fra STDIN.

else.sh

  1. #!/bin/bash
  2. # andet eksempel
  3. hvis
  4. nl $1
  5. andet
  6. nl /dev/stdin
  7. internet

Hvis Elif Andet

Nogle gange kan vi have en række forhold, der kan føre til forskellige stier.,

hvis
derefter
<kommandoer>
elif
derefter
<forskellige kommandoer>
andet
<andre kommandoer>
internet

For eksempel kan det være tilfældet, at hvis du er 18 år eller derover du kan gå til fest. Hvis du ikke er, men du har et brev fra dine forældre, kan du gå, men skal være tilbage før midnat. Ellers kan du ikke gå.

Du kan have så mange elif-grene, som du vil. Den endelige anden er også valgfri.,

Boolske operationer

Nogle gange vil vi kun gøre noget, hvis flere betingelser er opfyldt. Andre gange vil vi gerne udføre handlingen, hvis en af flere betingelser er opfyldt. Vi kan rumme disse med boolske operatører.

  • og – &&
  • eller – ||

For eksempel måske, at vi kun ønsker at udføre en operation, hvis filen er læsbar og har en størrelse større end nul.

and.sh

  1. #!,/bin/bash
  2. # og eksempel
  3. hvis &&
  4. echo Denne fil er nyttigt.
  5. fi

måske vil vi gerne udføre noget lidt anderledes, hvis brugeren enten er bob eller andy.

or.sh

  1. #!/bin/bash
  2. # eller eksempel
  3. hvis ||
  4. ls -alh
  5. andet
  6. ls
  7. internet

Case Udsagn

Nogle gange kan vi ønske at tage forskellige veje, der er baseret på en variabel matchende en serie af mønstre., Vi kunne bruge en række if og elif udsagn, men det ville snart vokse til at være uvægerligt. Heldigvis er der en sag erklæring, som kan gøre tingene renere., It’s a little hard to explain so here are some examples to illustrate:

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

Here is a basic example:

case.sh

  1. #!,/bin/bash
  2. # case-eksempel
  3. case – $1 i
  4. start)
  5. echo begyndt
  6. ;;
  7. stop)
  8. echo stoping
  9. ;;
  10. genstart)
  11. echo genstart
  12. ;;
  13. *)
  14. echo don\’t know
  15. ;;
  16. statistik

Lad os bryde det ned:

  • Line 4 – Denne linje begynder casemechanism.
  • linje 5 – Hvis $ 1 er lig med ‘start’, skal du udføre de efterfølgende handlinger. den) betyder slutningen af mønsteret.,
  • linje 7-vi identificerer slutningen af dette sæt udsagn med en dobbelt semikolon ( ;; ). Efter dette er det næste tilfælde at overveje.
  • linje 14-Husk at testen for hvert tilfælde er et mønster. * Repræsenterer et vilkårligt antal tegn. Det er essentialy en fangst alle, hvis for hvis ingen af de andre sager matcher. Det er ikke nødvendigt, men bruges ofte.
  • linje 17-esac er tilfældet baglæns og angiver, at vi er i slutningen af sagsangivelsen. Eventuelle andre udsagn efter dette vil blive udført normalt.
  1. ./case.sh start
  2. start
  3. .,/case.sh genstart
  4. genstart
  5. ./case.sh bla
  6. ved ikke

lad os Nu se på et lidt mere kompliceret eksempel, hvor mønstre er brugt en smule mere.

resum if

hvis udfør et sæt kommandoer, hvis en test er sand. ellers hvis testen ikke er sand, skal du udføre et andet sæt kommandoer. elif hvis den forrige test returnerede falsk, så prøv denne. && Udfør og betjening. / / Udfør eller operation. tilfælde Vælg et sæt kommandoer, der skal udføres, afhængigt af en streng, der matcher et bestemt mønster.,
indrykning indrykning gør din kode meget lettere at læse. Det bliver stadig vigtigere, da dine Bash-scripts bliver længere. Planlægning nu, hvor dine scripts bliver lidt mere komplekse, vil du sandsynligvis bruge lidt tid på at tænke på, hvordan du strukturerer dem, før du dykker ind.

aktiviteter

lad os nu tage nogle beslutninger.

  • Opret et Bash-script, der tager 2 numre som kommandolinjeargumenter. Det vil udskrive til skærmen den største af de to tal.,
  • Opret et Bash-script, der accepterer en fil som et kommandolinje-argument og analyserer det på bestemte måder. fx. du kan kontrollere, om filen er eksekverbar eller skrivbar. Du skal udskrive en bestemt besked, hvis sand og en anden, hvis falsk.
  • Opret et Bash-script, der udskriver en meddelelse baseret på hvilken ugedag det er (f.eks. ‘Happy hump day’ til Wededensday,’ TGIF ‘ til fredag osv.).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *