Skip to main content

Så här använder du testförhållanden inom ett Bash-skript

Things Mr. Welch is No Longer Allowed to do in a RPG #1-2450 Reading Compilation (April 2025)

Things Mr. Welch is No Longer Allowed to do in a RPG #1-2450 Reading Compilation (April 2025)
Anonim

Testkommandot kan användas på Linux-kommandoraden för att jämföra ett element mot en annan, men det används vanligare i BASH-skalskript som en del av villkorliga uttalanden som styr logik och programflöde.

Ett grundläggande exempel

Du kan prova dessa kommandon genom att öppna ett terminalfönster.

test 1 -eq 2 && echo "yes" || eko "nej"

Ovanstående kommando kan brytas ned enligt följande:

  • test - Det betyder att du håller på att göra en jämförelse
  • 1 - Det första elementet du ska jämföra
  • -eq - Hur jämför du. I det här fallet testar du om ett tal motsvarar en annan.
  • 2 - Det element du jämför det första elementet mot
  • && - Kör följande uttalande om resultatet är sant
  • echo "yes" - Kommandot att springa om jämförelsen returnerar sant
  • || - Kör följande uttalande om resultatet är felaktigt
  • echo "no" - Kommandot att springa om jämförelsen returnerar falskt

I huvudsak jämför kommandot 1 till 2 och om de matchar, exekveras ekot "ja" -satsen som visar "ja" och om de inte matchar exekveras eko-nej-satsen som visar "nej".

Jämförande antal

Om du jämför element som parser som nummer kan du använda följande jämförelseoperatörer:

  • -eq - värde 1 lika värde 2
  • -ge - är värde 1 större eller lika med värde 2
  • -gt - är värde 1 större än värde 2
  • -le - är värde 1 mindre än eller lika med värde 2
  • -lt - är värde 1 mindre än värde 2
  • -ne - värde 1 inte lika med värde 2

exempel

test 1 -eq 2 && echo "yes" || eko "nej"

(visar "nej" till skärmen eftersom 1 inte är lika med 2)

test 1 -ge 2 && echo "yes" || eko "nej"

(visar "nej" till skärmen eftersom 1 inte är större eller lika med 2)

test 1 -gt 2 && echo "yes" || eko "nej"

(visar "nej" till skärmen eftersom 1 inte är större än 2)

test 1-2 & & echo "yes" || eko "nej"

(visar "ja" till skärmen eftersom 1 är mindre än eller lika med 2)

test 1 -lt 2 && echo "yes" || eko "nej"

(visar "ja" till skärmen eftersom 1 är mindre än eller lika med 2)

test 1 -ne 2 && echo "yes" || eko "nej"

(visar "ja" på skärmen eftersom 1 inte är lika med 2)

Jämförelse av text

Om du jämför element som tolkar som strängar kan du använda följande jämförelseoperatörer:

  • = - Sträng 1 matchar sträng 2
  • ! = - är sträng 1 annorlunda än sträng 2
  • -n - är stränglängden större än 0
  • -z - är stränglängden 0

exempel

test "string1" = "string2" && echo "yes" || eko "nej"

(visar "nej" till skärmen eftersom "string1" inte är lika med "string2")

test "string1"! = "string2" && echo "yes" || eko "nej"

(visar "ja" till skärmen eftersom "string1" inte är lika med "string2")

test -n "string1" && echo "yes" || eko "nej"

(visar "ja" till skärmen eftersom "string1" har en stränglängd större än noll)

test -z "string1" && echo "yes" || eko "nej"

(visar "nej" till skärmen eftersom "string1" har en stränglängd större än noll)

Jämförande filer

Om du jämför filer kan du använda följande jämförelseoperatörer:

  • -ef - Har filerna samma enhet och inodnummer (är de samma fil)
  • -nt - Är den första filen nyare än den andra filen
  • -ot - Är den första filen äldre än den andra filen
  • -b - Filen finns och är blockspecial
  • -c - Filen finns och är teckenspecial
  • -d - Filen finns och är en katalog
  • -e - Filen finns
  • -f - Filen finns och är en vanlig fil
  • -g - Filen finns och har det angivna gruppnumret
  • -G - Filen finns och ägaren av användarens grupp
  • -h - Filen finns och är en symbolisk länk
  • -k - Filen finns och har sin klibbiga uppsättning
  • -L - Samma som -h
  • -O - ​​Filen existerar du är ägaren
  • -p - Filen existerar och är ett namngivet rör
  • -r - Filen finns och kan läsas
  • -s - Filen finns och har en storlek större än noll
  • -S - Filen finns och är ett uttag
  • -t - Filbeskrivningen öppnas på en terminal
  • -u - Filen finns och set-user-id-biten är inställd
  • -w - Filen finns och kan skrivas
  • -x - Filen finns och kan köras

exempel

test / väg / till / file1 -nt / path / to / file2 && echo "yes"

(Om filen1 är nyare än filen2 kommer ordet "ja" att visas)

test -e / path / to / file1 && echo "yes"

(om filen1 existerar kommer ordet "ja" att visas)

test -O / path / to / file1 && echo "yes"

(om du äger filen1 visas ordet "ja")

Terminologi

  • Blockera speciell - Filen är en blockenhet vilket innebär att data läses i block av byte. Det här är allmänt enhetsfiler som hårddiskar.
  • Tecken speciell - Filen handlas omedelbart när du skriver till den och är vanligtvis en enhet som en seriell port

Jämförelse av flera villkor

Hittills har allt jämfört en sak mot en annan, men vad händer om du vill jämföra två villkor?

Till exempel, om ett djur har 4 ben och går "moo", är det förmodligen en ko. Att bara kolla på 4 ben garanterar inte att du har en ko, men kontrollerar ljudet som det säkert gör.

För att testa båda villkoren på en gång använd följande uttalande:

test 4 -eq 4 -a "moo" = "moo" && echo "det är en ko" || eko "det är inte en ko"

Nyckeln här är den -a som står för och .

Det finns ett bättre och vanligare sätt att utföra samma test och det är som följer:

test 4-eq 4 && test "moo" = "moo" && echo "det är en ko" || eko "det är inte en ko"

Ett annat test du kanske vill göra är att jämföra två uttalanden och om det är sant, skriv ut en sträng. Om du till exempel vill kontrollera att en fil med namnet "file1.txt" finns eller en fil som heter "file1.doc", kan du använda följande kommando:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 existerar inte"

Nyckeln här är den som står för eller .

Det finns ett bättre och vanligare sätt att utföra samma test och det är som följer:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 existerar inte"

Eliminering av testets sökord

Du behöver inte faktiskt använda ordtestet för att utföra jämförelsen. Allt du behöver göra är att bifoga uttalandet i kvadrat parentes enligt följande:

-e file1.txt && echo "file1 exists" || echo "file1 existerar inte"

Och betyder i grunden detsamma som testet.

Nu vet du det här du kan förbättra vid att jämföra flera villkor enligt följande:

4-eq 4 && "moo" = "moo" && echo "det är en ko" || eko "det är inte en ko"-e file1.txt || -e file1.doc && echo "file1 exists" || echo "file1 existerar inte"

Sammanfattning

Testkommandot är mer användbart i skript eftersom du kan testa värdet av en variabel mot ett annat och kontrollprogramflöde. På standardkommandot kan du använda den för att testa om en fil finns eller inte.