Bash If-Then-Else Exempel

Bash If Then Else Example



I den här lektionen kommer vi att se hur vi kan använda If-Then-Else-uttalanden i Bash-miljöskript vi skriver. If-Then-Else-påståenden är ett användbart verktyg för att tillhandahålla ett sätt att definiera handlingsvägen för ett skript när vissa villkor är uppfyllda. Låt oss se vad som är syntaxen för If-Then-Else-uttalanden:

omVissa kommandon;
sedanDärefter-kommandon;
annanELLER-KOMMANDOER;
vara

I kommandot ovan visas, om SOMMAN-KOMMANDEN befinner sig vara sann eller dess återkomststatus befinner sig på 0, kommer THEN-COMMANDS att köras. Om så inte är fallet körs ELSE-COMMANDS. I SOMMAN-KOMMANDEN gör vi vanligtvis någon strängjämförelse eller värdejämförelse i form av heltal. Vi kan också göra många operationer som involverar filer. Låt oss titta på några exempel på primära kommandon som huvudsakligen används när du arbetar med filbaserade villkor:







Primär Menande
[-till] Returnerar sant när FIL finns.
[-b] Returnerar true när FIL finns och är en blockfil.
[-c] Returnerar sant när FIL finns och är en specialteckenfil.
[-d] Returnerar true när FIL finns och är en katalog.
[-Och] Returnerar sant när FIL finns.
[-f] Returnerar true när FIL finns och är en vanlig fil.
[-g] Returnerar sant när FIL finns och dess SGID -bit är inställd.
[-h] Returnerar sant när FIL finns och är en symbolisk länk.
[-k] Returnerar sant när FIL finns och dess klibbiga bit är inställd.
[-p] Returnerar sant när FIL finns och är ett namngivet rör (FIFO).
[-r] Returnerar sant när FIL finns och kan läsas.
[-s] Returnerar sant när FIL finns och har en storlek större än noll.
[-t] Returnerar sant när filbeskrivningen FD är öppen och hänvisar till en terminal.
[-u] Returnerar true när FIL finns och dess SUID -bit (set user ID) är inställd.
[ -i ] Returnerar sant när FIL finns och är skrivbar.
[-x] Returnerar true när FIL finns och är körbar.
[-O] Returnerar sant när FIL finns och ägs av det effektiva användar -ID: t.
[-G] Returnerar sant när FIL finns och ägs av det effektiva grupp -ID: t.
[-THE] Returnerar sant när FIL finns och är en symbolisk länk.
[-N] Returnerar sant när FIL finns och har ändrats sedan den lästes senast.
[-S] Returnerar sant när FIL finns och är ett uttag.

THEN-COMMANDS och ELSE-COMMANDS kan vara alla giltiga UNIX-operationer eller något körbart program. Observera att sedan och vara kommandon separeras med semikolon eftersom de anses vara helt separata element i ett skript.



Om-då-annat enkelt exempel

Låt oss börja vår lektion med ett mycket enkelt exempel med If-Then-Else-uttalanden.
Här är ett exempelprogram:



Om Exempel

Om Exempel





Här är resultatet vi ser när vi kör vårt skript:

$. ifelse1.sh
Värdena är desamma!
$

Använda kommandoradsargument

Vi kan också använda kommandoradsargument i våra skript och använda antalet argument och själva värdena som villkor i IF-satsen vi definierar. Vi definierar först en textfil med följande innehåll:



Jag heter LinuxHint. Jag älskar servrar, särskilt Ubuntu. De är så
avslutande!

Nu kan vi skriva ett skript som hittar om ett ord förekommer i en textfil eller inte. Låt oss definiera manuset nu:

kastade ut 'Hitta $ 1 i $ 2'
grepp $ 1 $ 2
om [ $? -född 0 ]
sedan
kastade ut '$ 1 hittades inte i filen $ 2.'
annan
kastade ut '$ 1 hittades i filen $ 2.'
vara
kastade ut 'Skriptet är klart.'

Detta manus är väldigt dynamiskt. Det anser ordet att hitta och filen att söka från kommandoraden själv. Nu är vi redo att köra vårt manus:

. ifelse2.sh älskar hej.txt

Vi kommer att se en utmatning som:

Att hitta kärlekenihej.txt
kärlek hittadi filhej.txt.
Skriptet slutfört.

Kontrollerar antalet kommandoradsargument

Inuti ett IF-uttalande kan vi till och med kontrollera hur många kommandoradsargument som skickades till kommandot så att vi kan agera på samma:

räkna=$ #
om [ ! $ räkning -gt 1 ]
sedan
kastade ut 'Inte tillräckligt med argument'
annan
kastade ut 'Bra jobbat!'
vara

Låt oss köra detta skript nu, vi kommer att se följande utdata:

Kommandoradsargument

Kommandoradsargument

If-Then-Elif-Else-uttalanden

Vi kan också ha flera IF -uttalanden i samma block för att begränsa den beslutsväg vårt program tar för att utföra kommandon vi definierade. Här är syntaxen för att definiera flera IF -påståenden i våra skript:

omTESTKOMMANDOER;
sedan
RESULTATKOMMANDOER;
elif
EN ANNAN KOMMANDO;
sedan
EN ANNAN RESULTATKOMMANDO;
annan
ALTERNATE-COMMANDS;
vara

Detta ser dock ganska bekant ut och lätt att följa upp. Låt oss definiera ett enkelt exempel för att fastställa hur trädet fungerar:

räkna=$ #
om [ $ räkning -ekv 1 ]
sedan
kastade ut 'Bara ett argument hittades.'
elif [ $ räkning -ekv 2 ]
sedan
kastade ut 'Bättre, två argument hittades.'
annan
kastade ut 'Bra jobbat, många argument hittade!'
vara

Här är vad vi får tillbaka med det här kommandot:

Om Då Elif Else exempel

Om Då Elif Else exempel

Använda fallstater

IF-ELSE-uttalanden är användbara när du har en stor lista med alternativ som du behöver ta ställning till. Men om du bara vill utföra en åtgärd i få fall av exakt matchning med resultatet kan vi också använda CASE -uttalanden i Bash -skript. Dess syntax ser ut så här:

fallUTTRYCKiFALL 1)KOMMANDOER FÖR UTFÖRANDE;
CASE2)KOMMANDOER FÖR UTFÖRANDE;
CASE2)KOMMANDOER FÖR UTFÖRANDE;
...)KOMMANDOER FÖR UTFÖRANDE;
*)KOMMANDOER FÖR UTFÖRANDE;
esac

Det sista fallet med * fungerar som standardfall och kommer att köras när inget av de ovan definierade fallen visar sig vara en matchning.

Låt oss snabbt konstruera ett enkelt exempel med hjälp av CASE -satserna:

fall '$ 1' i
1)
kastade ut 'Värdet är 1.'
;;
2)
kastade ut 'Värdet är 2.'
;;
3)
kastade ut 'Värdet är 3.'
;;
*)
kastade ut 'Annat värde har godkänts.'
esac

Varje CASE -uttalande avslutas med ;; (dubbla semikolonmärken). Här är vad vi får tillbaka med det här kommandot:

CASE -exempel

CASE -exempel

Slutsats

I den här lektionen tittade vi på hur vi kan använda IF-ELSE, IF-THEN-ELIF och CASE-påståenden i de Bash-skript som vi definierar för att vidta specifika åtgärder på grundval av värden som finns i våra program eller skickas av användaren med hjälp av positionella parametrar.