i den här handledningen kommer vi att gå igenom grunderna i Bashif
– uttalandet och visa dig hur du använder det i dina skalskript.
beslutsfattande är ett av de mest grundläggande begreppen datorprogrammering. Som i alla andra programmeringsspråk, if
, if..else
, if..elif..else
och kapslade if
uttalanden i Bash kan användas för att exekvera kod baserat på ett visst tillstånd.,
om uttalande #
Bashif
villkor kan ha olika former. Den mest grundläggande if
– satsen tar följande form:
if TEST-COMMANDthen STATEMENTSfi
satsen if
börjar med nyckelordet if
följt av det villkorliga uttrycket och nyckelordet then
. Uttrycket avslutas med nyckelordetfi
.,
omTEST-COMMAND
utvärderar tillTrue
körsSTATEMENTS
. OmTEST-COMMAND
returnerarFalse
händer ingenting,STATEMENTS
ignoreras.
i allmänhet är det en god praxis att alltid dra in din kod och separera kodblock med tomma rader. De flesta väljer att använda antingen 4-space eller 2-space indrag. Indragningar och tomma linjer gör din kod mer läsbar och organiserad.,
låt oss titta på följande exempelskript som kontrollerar om ett visst nummer är större än 10:
#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi
spara koden i en fil och kör den från kommandoraden:
bash test.sh
skriptet uppmanar dig att ange ett nummer. Om du till exempel anger 15, kommer kommandot test
att utvärdera till true
eftersom 15 är större än 10, och kommandot echo
inuti then
kommer att utföras.
The variable is greater than 10.
om..,else Statement #
bash if..else
uttalande tar följande form:
if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi
om TEST-COMMAND
utvärderar till True
, STATEMENTS1
returnerarFalse
, kommerSTATEMENTS2
att utföras. Du kan bara ha en else
– klausul i uttalandet.,
låt oss lägga till enelse
– klausul i föregående exempelskript:
om du kör koden och anger ett nummer kommer skriptet att skriva ut ett annat meddelande baserat på om numret är större eller mindre/lika med 10.
om..elif..else Statement #
the Bash if..elif..else
statement tar följande form:
if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi
om TEST-COMMAND1
utvärderar till True
, STATEMENTS1
utvärderar tillTrue
körsSTATEMENTS2
. Om ingen av testkommandona utvärderar tillTrue
körsSTATEMENTS2
.
Du kan ha en eller fleraelif
– klausuler i uttalandet. Klausulenelse
är valfri.
villkoren utvärderas sekventiellt., När ett villkor returnerar True
utförs inte de återstående villkoren och programkontrollen flyttas till slutet av if
– satserna.
låt oss lägga till enelif
klausul till föregående skript:
kapslade om satser #
Bash låter dig boif
satser inomif
satser. Du kan placera fleraif
– satser i en annanif
– sats.,
följande skript kommer att uppmana dig att ange tre nummer och kommer att skriva ut det största antalet bland de tre siffrorna.
här är hur utdata kommer att se ut:
Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
case
istället kapsladeif
.flera villkor #
den logiskaOR
ochAND
operatörer tillåter dig att använda flera villkor iif
uttalanden.,
Här är en annan version av skriptet för att skriva ut det största antalet bland de tre siffrorna. I den här versionen använder vi istället för de kapslade if
– satserna den logiska AND
(&&
) – operatören.
testa operatorer #
i Bash tar kommandottest
ett av följande syntaxformer:
test EXPRESSION]
för att göra skriptet portabelt, föredrar du att använda det gamla testet[
– kommandot som finns tillgängligt på alla POSIX-skal., Den nya uppgraderade versionen av kommandot test
[[
(dubbla fästen) stöds på de flesta moderna system med Bash, Zsh och Ksh som standardskal.
för att negera testuttrycket, använd den logiskaNOT
(!
) operatören. När du jämför strängar, använd alltid enkla eller dubbla citat för att undvika orddelning och globbingproblem.,
nedan är några av de vanligaste operatörerna:
-
-n
VAR
– sant om längden påVAR
är större än noll. -
-z
VAR
– sant omVAR
är tom. -
STRING1 = STRING2
– True ifSTRING1
ochSTRING2
är lika. -
STRING1 != STRING2
– True ifSTRING1
ochSTRING2
är inte lika., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
– sant omFILE
finns och är en katalog. -
-e
FILE
– sant omFILE
finns och är en fil, oavsett typ (nod, katalog, uttag, etc.). -
-f
FILE
– sant omFILE
finns och är en vanlig fil (inte en katalog eller enhet).,
slutsats #
uttalandenaif
,if..else
ochif..elif..else
låter dig styra flödet av bash-skriptets utförande genom att utvärdera givna villkor.