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.
generellt är det mer effektivt att använda uttalandetcase 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:

  • -nVAR – sant om längden påVAR är större än noll.
  • -zVAR – sant omVAR är tom.
  • STRING1 = STRING2 – True ifSTRING1ochSTRING2 är lika.
  • STRING1 != STRING2 – True ifSTRING1 ochSTRING2 är inte lika.,
  • INTEGER1 -eq INTEGER2 – True if INTEGER1 and INTEGER2 are equal.
  • INTEGER1 -gt INTEGER2 – True if INTEGER1 is greater than INTEGER2.
  • INTEGER1 -lt INTEGER2 – True if INTEGER1 is less than INTEGER2.
  • INTEGER1 -ge INTEGER2 – True if INTEGER1 is equal or greater than INTEGER2.
  • INTEGER1 -le INTEGER2 – True if INTEGER1 is equal or less than INTEGER2.,
  • -h FILE – True if the FILE exists and is a symbolic link.
  • -r FILE – True if the FILE exists and is readable.
  • -w FILE – True if the FILE exists and is writable.
  • -x FILE – True if the FILE exists and is executable.,
  • -dFILE – sant omFILE finns och är en katalog.
  • -e FILE – sant om FILE finns och är en fil, oavsett typ (nod, katalog, uttag, etc.).
  • -f FILE – sant om FILE 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.