I denne leksjonen vil vi se hvordan vi kan bruke If-Then-Else-setninger i Bash-miljøskript vi skriver. If-Then-Else-setninger er et nyttig verktøy for å gi en måte å definere handlingsbanen til et script når noen betingelser er oppfylt. La oss se hva som er syntaksen for If-Then-Else-setninger:
hvisNOEN-KOMMANDOER;deretterKOMMANDOER;
ellersANDRE KOMMANDOER;
være
I den ovennevnte kommandoen, hvis SOMME-KOMMANDOER er funnet å være sanne eller dens tilbakestatus er 0, vil THEN-COMMANDS bli utført. Hvis dette ikke er tilfellet, utføres ELSE-COMMANDS. I SOMMEN-KOMMANDOER gjør vi vanligvis en strengsammenligning eller verdisammenligning i form av heltall. Vi kan også utføre mange operasjoner som involverer filer. La oss se på noen eksempler på primære kommandoer som hovedsakelig brukes når du arbeider med filbaserte forhold:
Hoved | Betydning |
---|---|
[ -til ] | Returnerer sant når FIL finnes. |
[-b] | Returnerer true når FIL finnes og er en spesiell blokkfil. |
[-c] | Returnerer true når FIL finnes og er en spesiell fil for tegn. |
[-d] | Returnerer true når FIL finnes og er en katalog. |
[-Og] | Returnerer sant når FIL finnes. |
[-f] | Returnerer true når FIL finnes og er en vanlig fil. |
[-g] | Returnerer true når FIL finnes og dens SGID -bit er angitt. |
[-h] | Returnerer sant når FIL finnes og er en symbolsk lenke. |
[-k] | Returnerer sant når FIL finnes og den klissete biten er angitt. |
[-p] | Returnerer true når FIL finnes og er et navngitt rør (FIFO). |
[-r] | Returnerer true når FIL finnes og er lesbar. |
[-s] | Returnerer true når FIL finnes og har en størrelse større enn null. |
[-t] | Returnerer true når filbeskrivelsen FD er åpen og refererer til en terminal. |
[-u] | Returnerer true når FIL finnes og dens SUID -bit (sett bruker -ID) er angitt. |
[-in] | Returnerer sant når FIL finnes og kan skrives. |
[-x] | Returnerer true når FIL finnes og er kjørbar. |
[-O] | Returnerer true når FILE eksisterer og eies av den effektive bruker -IDen. |
[-G] | Returnerer sant når FIL finnes og eies av den effektive gruppe -IDen. |
[-THE] | Returnerer sant når FIL finnes og er en symbolsk lenke. |
[-N] | Returnerer sant når FIL finnes og har blitt endret siden den sist ble lest. |
[-S] | Returnerer sant når FIL finnes og er en stikkontakt. |
THEN-COMMANDS og ELSE-COMMANDS kan være enhver gyldig UNIX-operasjon eller et kjørbart program. Vær oppmerksom på at deretter og være kommandoer er atskilt med semikolon, da de anses å være helt separate elementer i et skript.
If-Then-Else Enkelt eksempel
La oss starte leksjonen vår med et veldig enkelt eksempel med If-Then-Else-utsagn.
Her er et eksempelprogram:
Her er utgangen vi ser når vi kjører skriptet vårt:
$. ifelse1.shVerdiene er de samme!
$
Bruke kommandolinjeargumenter
Vi kan også bruke kommandolinjeargumenter i skriptene våre og bruke antall argumenter og selve verdiene som en betingelse i IF-setningen vi definerer. Vi definerer først en tekstfil med følgende innhold:
Mitt navn er LinuxHint. Jeg elsker servere, spesielt Ubuntu. De er det
terminalt!
Nå kan vi skrive et skript som finner om et ord forekommer i en tekstfil eller ikke. La oss definere skriptet nå:
kastet ut 'Finne $ 1 i $ 2'grep $ 1 $ 2
hvis [ $? -Født 0 ]
deretter
kastet ut '$ 1 ble ikke funnet i filen $ 2.'
ellers
kastet ut '$ 1 funnet i filen $ 2.'
være
kastet ut 'Manus fullført.'
Dette skriptet er veldig dynamisk. Den anser ordet å finne og filen for å søke fra selve kommandolinjen. Nå er vi klare til å kjøre skriptet vårt:
. ifelse2.sh elsker hello.txtVi vil se en utgang som:
Å finne kjærlighetenihei.txtkjærligheten funneti filhei.txt.
Manus fullført.
Kontrollerer antall kommandolinjeargumenter
Inne i en IF-setning kan vi til og med sjekke hvor mange kommandolinjeargumenter som ble sendt til kommandoen, slik at vi kan handle på samme måte:
telle=$ #hvis [ ! $ telle -gt 1 ]
deretter
kastet ut 'Ikke nok argumenter'
ellers
kastet ut 'Godt jobbet!'
være
La oss kjøre dette skriptet nå, vi vil se følgende utdata:
If-Then-Elif-Else-utsagn
Vi kan også ha flere IF -setninger i samme blokk for å begrense avgjørelsesbanen vårt program tar for å utføre kommandoer vi definerte. Her er syntaksen for å definere flere IF -setninger i skriptene våre:
hvisTESTKOMMANDOER;deretter
RESULTATKOMMANDOER;
elif
EN ANDRE KOMMANDO;
deretter
ETT ANDRE RESULTATKOMMANDOER;
ellers
ALTERNATE-COMMANDS;
være
Dette ser ganske kjent ut og er lett å følge opp også. La oss definere et enkelt eksempel for å fastslå hvordan treet fungerer:
telle=$ #hvis [ $ telle -ekv 1 ]
deretter
kastet ut 'Bare ett argument funnet.'
elif [ $ telle -ekv 2 ]
deretter
kastet ut 'Bedre, to argumenter funnet.'
ellers
kastet ut 'Godt jobbet, mange argumenter funnet!'
være
Her er hva vi får tilbake med denne kommandoen:
Bruke saksbevegelser
IF-ELSE-utsagn er nyttige når du har en stor liste over alternativer du må ta stilling til. Men hvis du bare vil utføre en handling i få tilfeller av nøyaktig samsvar med resultatet, kan vi også bruke CASE -setninger i Bash -skript. Syntaksen ser slik ut:
sakUTTRYKKiCASE1)KOMMANDOER-FOR-UTFØRELSE;CASE2)KOMMANDOER-FOR-UTFØRELSE;
CASE2)KOMMANDOER-FOR-UTFØRELSE;
...)KOMMANDOER-FOR-UTFØRELSE;
*)KOMMANDOER-FOR-UTFØRELSE;
esac
Den siste saken med * fungerer som standard tilfelle og vil bli utført når ingen av de ovenfor definerte sakene er funnet å være samsvarende.
La oss raskt konstruere et enkelt eksempel ved å bruke CASE -setningene:
sak '$ 1' i1)
kastet ut 'Verdien er 1.'
;;
2)
kastet ut 'Verdien er 2.'
;;
3)
kastet ut 'Verdien er 3.'
;;
*)
kastet ut 'Annen verdi passerte.'
esac
Hver CASE -erklæring avsluttes med ;; (doble semikolonmerker). Her er hva vi får tilbake med denne kommandoen:
Konklusjon
I denne leksjonen så vi på hvordan vi kan bruke IF-ELSE, IF-THEN-ELIF- og CASE-setninger i Bash-skriptene vi definerer for å iverksette spesifikke handlinger på grunnlag av verdier som finnes i programmene våre eller passert av brukeren ved hjelp av posisjonelle parametere.