Bash If-Then-Else Eksempel

Bash If Then Else Example



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:



Hvis eksempel

Hvis eksempel





Her er utgangen vi ser når vi kjører skriptet vårt:

$. ifelse1.sh
Verdiene 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.txt

Vi vil se en utgang som:

Å finne kjærlighetenihei.txt
kjæ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:

Kommandolinjeargumenter

Kommandolinjeargumenter

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:

Hvis Da Elif Else eksempel

Hvis Da Elif Else eksempel

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' i
1)
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:

CASE eksempel

CASE eksempel

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.