Bash If-Then-Else-eksempel

Bash If Then Else Example



I denne lektion vil vi se, hvordan vi kan bruge If-Then-Else-udsagn i Bash-miljøscripts, vi skriver. If-Then-Else-sætninger er et nyttigt værktøj til at angive en måde at definere handlingsvejen for et script, når nogle betingelser er opfyldt. Lad os se, hvad der er syntaksen for If-Then-Else-sætninger:

hvisNOGLE KOMMANDOER;
derefterSÅ KOMMENDER;
andetELLER-KOMMANDOER;
være

I den viste kommando ovenfor, hvis SOME-COMMANDS viser sig at være sandt, eller hvis dens returneringsstatus er 0, udføres THEN-COMMANDS. Hvis dette ikke er tilfældet, udføres ELSE-COMMANDS. I SOMMEN-KOMMANDOER foretager vi normalt nogle String-sammenligninger eller værdisammenligninger i form af heltal. Vi kan også udføre mange operationer, der involverer filer. Lad os se på nogle eksempler på primære kommandoer, der hovedsageligt bruges, når du arbejder med filbaserede forhold:







Primær Betyder
[ -til ] Returnerer true, når FIL findes.
[-b] Returnerer true, når FIL findes og er en speciel blokfil.
[-c] Returnerer true, når FIL findes og er en specialfil for tegn.
[-d] Returnerer true, når FIL findes og er et bibliotek.
[-Og] Returnerer true, når FIL findes.
[-f] Returnerer true, når FIL findes og er en almindelig fil.
[-g] Returnerer true, når FIL findes og dens SGID -bit er indstillet.
[-h] Returnerer sandt, når FIL findes og er et symbolsk link.
[-k] Returnerer true, når FIL findes og dens klæbrige bit er indstillet.
[-p] Returnerer true, når FIL findes og er et navngivet rør (FIFO).
[-r] Returnerer sandt, når FIL findes og kan læses.
[-s] Returnerer true, når FIL findes og har en størrelse større end nul.
[-t] Returnerer true, når filbeskrivelsen FD er åben og henviser til en terminal.
[-u] Returnerer true, når FIL findes, og dens SUID (set user ID) bit er indstillet.
[-i] Returnerer sandt, når FIL findes og kan skrives.
[-x] Returnerer true, når FIL findes og er eksekverbar.
[-O] Returnerer sandt, når FIL findes og ejes af det effektive bruger -id.
[-G] Returnerer sandt, når FIL findes og ejes af det effektive gruppe -id.
[ -DET ] Returnerer sandt, når FIL findes og er et symbolsk link.
[-N] Returnerer sandt, når FIL findes og er blevet ændret, siden den sidst blev læst.
[-S] Returnerer true, når FIL findes og er en stikkontakt.

THEN-COMMANDS og ELSE-COMMANDS kan være enhver gyldig UNIX-operation eller ethvert eksekverbart program. Bemærk, at derefter og være kommandoer adskilles med semikolon, da de betragtes som helt separate elementer i et script.



If-Then-Else Simple eksempel

Lad os starte vores lektion med et meget enkelt eksempel med If-Then-Else-udsagn.
Her er et eksempelprogram:



Hvis eksempel

Hvis eksempel





Her er det output, vi ser, når vi kører vores script:

$. ifelse1.sh
Værdierne er de samme!
$

Brug af kommandolinjeargumenter

Vi kan også bruge kommandolinjeargumenter i vores scripts og bruge antallet af argumenter og selve værdierne som en betingelse i IF-sætningen, vi definerer. Vi definerer først en tekstfil med følgende indhold:



Mit navn er LinuxHint. Jeg elsker servere, især Ubuntu -serverne. De er sådan
terminalt!

Nu kan vi skrive et script, der finder, om et ord forekommer i en tekstfil eller ej. Lad os definere scriptet nu:

smed ud 'Find $ 1 i $ 2'
greb $ 1 $ 2
hvis [ $? -Født 0 ]
derefter
smed ud '$ 1 findes ikke i filen $ 2.'
andet
smed ud '$ 1 fundet i fil $ 2.'
være
smed ud 'Script afsluttet.'

Dette script er meget dynamisk. Det anser ordet for at finde og filen for at søge fra kommandolinjen selv. Nu er vi klar til at køre vores script:

. ifelse2.sh elsker hej.txt

Vi vil se et output som:

At finde kærlighedenihej.txt
kærlighed fundeti filhej.txt.
Script afsluttet.

Kontrol af antal kommandolinjeargumenter

Inde i en IF-sætning kan vi endda kontrollere, hvor mange kommandolinjeargumenter, der blev sendt til kommandoen, så vi kan handle ud fra det samme:

tælle=$ #
hvis [ ! $ tæller -gt 1 ]
derefter
smed ud 'Ikke nok argumenter'
andet
smed ud 'Godt arbejde!'
være

Lad os køre dette script nu, vi vil se følgende output:

Kommandolinjeargumenter

Kommandolinjeargumenter

If-Then-Elif-Else-erklæringer

Vi kan også have flere IF -sætninger i den samme blok for at indsnævre den beslutningssti, vores program tager for at udføre kommandoer, vi definerede. Her er syntaksen til at definere flere IF -sætninger i vores scripts:

hvisTESTKOMMANDOER;
derefter
RESULTATKOMMANDOER;
elif
EN anden kommando;
derefter
EN ANDRE RESULTATKOMMANDOER;
andet
ALTERNATE COMMANDS;
være

Dette ser dog ganske velkendt ud og let at følge op. Lad os definere et enkelt eksempel for at fastslå, hvordan træet fungerer:

tælle=$ #
hvis [ $ tæller -ækv 1 ]
derefter
smed ud 'Kun et argument fundet.'
elif [ $ tæller -ækv 2 ]
derefter
smed ud 'Bedre, to argumenter fundet.'
andet
smed ud 'Godt arbejde, mange argumenter fundet!'
være

Her er hvad vi får tilbage med denne kommando:

Hvis Så Elif Else eksempel

Hvis Så Elif Else eksempel

Brug af sagsstationer

IF-ELSE-udsagn er nyttige, når du har en stor liste over muligheder, du skal tage stilling til. Men hvis du kun ønsker at udføre en handling i få tilfælde af nøjagtig match med resultatet, kan vi også bruge CASE -sætninger i Bash -scripts. Dens syntaks ligner:

sagUDTRYKiSAG1)KOMMANDOER-TIL-UDFØRELSE;
CASE2)KOMMANDOER-TIL-UDFØRELSE;
CASE2)KOMMANDOER-TIL-UDFØRELSE;
...)KOMMANDOER-TIL-UDFØRELSE;
*)KOMMANDOER-TIL-UDFØRELSE;
esac

Den sidste sag med * fungerer som standardsagen og udføres, når ingen af ​​de ovenfor definerede sager viser sig at være en matchning.

Lad os hurtigt konstruere et enkelt eksempel ved hjælp af CASE -sætningerne:

sag '$ 1' i
1)
smed ud 'Værdien er 1.'
;;
2)
smed ud 'Værdien er 2.'
;;
3)
smed ud 'Værdi er 3.'
;;
*)
smed ud 'Anden værdi bestået.'
esac

Hver CASE -erklæring afsluttes af ;; (dobbelte semikolonmærker). Her er hvad vi får tilbage med denne kommando:

CASE eksempel

CASE eksempel

Konklusion

I denne lektion kiggede vi på, hvordan vi kan bruge IF-ELSE, IF-THEN-ELIF og CASE-sætninger i de Bash-scripts, vi definerer, til at foretage specifikke handlinger på grundlag af værdier, der findes i vores programmer eller overføres af brugeren ved hjælp af positionelle parametre.