Skip to main content

Sådan bruges testbetingelser i et Bash-script

In depth with Dana White: McGregor, Diaz, Poirier, Till and more - UFC 229 (Juni 2025)

In depth with Dana White: McGregor, Diaz, Poirier, Till and more - UFC 229 (Juni 2025)
Anonim

Testkommandoen kan bruges på Linux-kommandolinjen til at sammenligne et element mod en anden, men det er mere almindeligt anvendt i BASH-shell-scripts som en del af betingede udsagn som styrelogik og programflow.

Et grundlæggende eksempel

Du kan prøve disse kommandoer ved blot at åbne et terminalvindue.

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

Ovennævnte kommando kan opdeles som følger:

  • test - Det betyder, at du er ved at udføre en sammenligning
  • 1 - Det første element, du skal sammenligne
  • -eq - Hvordan sammenligner du. I dette tilfælde tester du om et tal svarer til en anden.
  • 2 - Det element, du sammenligner det første element imod
  • && - Kør følgende sætning, hvis resultatet er sandt
  • ekko "ja" - kommandoen til at køre, hvis sammenligningen returnerer sandt
  • || - Kør følgende sætning, hvis resultatet er falsk
  • ekko "nej" - kommandoen til at køre, hvis sammenligningen returneres falsk

I det væsentlige er kommandoen sammenlignet med 1 til 2, og hvis de matcher, udføres eko-ja-sætningen, der viser "ja", og hvis de ikke stemmer overens, udføres ekko-nej-sætningen, som viser "nej".

Sammenligning af tal

Hvis du sammenligner elementer, der analyserer som tal, kan du bruge følgende sammenligningsoperatører:

  • -eq - værdi 1 lige værdi 2
  • -ge - er værdi 1 større eller lig med værdi 2
  • -gt - er værdi 1 større end værdi 2
  • -le - er værdi 1 mindre end eller lig med værdi 2
  • -lt - er værdi 1 mindre end værdi 2
  • -ne - betyder værdi 1 ikke lig med værdi 2

eksempler

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

(viser "nej" til skærmen, fordi 1 ikke er lig med 2)

test 1 -ge 2 && echo "ja" || ekko "nej"

(viser "nej" til skærmen, fordi 1 ikke er større eller lig med 2)

test 1 -gt 2 && echo "ja" || ekko "nej"

(viser "nej" til skærmen, fordi 1 ikke er større end 2)

test 1-2 & & ekko "ja" || ekko "nej"

(viser "ja" til skærmen, fordi 1 er mindre end eller lig med 2)

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

(viser "ja" til skærmen, fordi 1 er mindre end eller lig med 2)

test 1 -ne 2 && echo "ja" || ekko "nej"

(viser "ja" til skærmen, fordi 1 ikke svarer til 2)

Sammenligning af tekst

Hvis du sammenligner elementer, der analyserer som strenge, kan du bruge følgende sammenligningsoperatører:

  • = - Er streng 1 matchet streng 2
  • ! = - er streng 1 forskellig fra streng 2
  • -n - er strenglængden større end 0
  • -z - er strenglængden 0

eksempler

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

(viser "nej" til skærmen, fordi "string1" ikke svarer til "string2")

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

(viser "ja" til skærmen, fordi "streng1" ikke svarer til "string2")

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

(viser "ja" til skærmen, fordi "string1" har en strenglængde større end nul)

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

(viser "nej" til skærmen, fordi "string1" har en strenglængde større end nul)

Sammenligning af filer

Hvis du sammenligner filer, kan du bruge følgende sammenligningsoperatører:

  • -ef - Har filerne samme enhed og inode numre (er de samme fil)
  • -nt - Er den første fil nyere end den anden fil
  • -ot - Er den første fil ældre end den anden fil
  • -b - Filen findes og er blokspecial
  • -c - Filen findes og er tegnspecial
  • -d - Filen findes og er en mappe
  • -e - Filen findes
  • -f - Filen findes og er en almindelig fil
  • -g - Filen findes og har det angivne gruppe nummer
  • -G - Filen findes og ejer af brugerens gruppe
  • -h - Filen findes og er et symbolsk link
  • -k - Filen findes og har sin klæbende sæt
  • -L - Det samme som -h
  • -O - ​​Filen findes, du er ejer
  • -p - Filen findes og er et navngivet rør
  • -r - Filen findes og kan læses
  • -s - Filen findes og har en størrelse større end nul
  • -S - Filen findes og er en stikkontakt
  • -t - Filbeskrivelsen åbnes på en terminal
  • -u - Filen findes, og set-user-id-bit er indstillet
  • -w - Filen findes og kan skrives
  • -x - Filen findes og kan eksekveres

eksempler

test / path / to / file1 -nt / path / to / file2 && echo "ja"

(Hvis fil1 er nyere end fil2, vises ordet "ja")

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

(hvis fil1 eksisterer vises ordet "ja")

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

(hvis du ejer filen1 så vises ordet "ja"))

Terminologi

  • Blok special - Filen er en blok enhed, hvilket betyder at data læses i blokke af bytes. Disse er generelt enhedsfiler som harddiske.
  • Tegnspecial - Filen handles straks, når du skriver til den og er almindeligvis en enhed som en seriel port

Sammenligning af flere betingelser

Hidtil har alt været at sammenligne en ting imod en anden, men hvad nu hvis du vil sammenligne to forhold?

For eksempel, hvis et dyr har 4 ben og går "moo", er det nok en ko. Bare at kontrollere for 4 ben garanterer ikke, at du har en ko, men kontrollerer den lyd, det helt sikkert gør.

For at teste begge betingelser på én gang skal du bruge følgende erklæring:

test 4 -eq 4 -a "moo" = "moo" && echo "det er en ko" || ekko "det er ikke en ko"

Hoveddelen her er den -a som står for og .

Der er en bedre og mere almindeligt anvendt måde at udføre den samme test på, og det er som følger:

test 4-eq 4 && test "moo" = "moo" && echo "det er en ko" || ekko "det er ikke en ko"

En anden test, du måske vil lave, er at sammenligne to udsagn, og hvis det enten er sandt, skriv en streng. Hvis du f.eks. Vil kontrollere, at der findes en fil med navnet "file1.txt" eller en fil kaldet "file1.doc", kan du bruge følgende kommando:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || ekko "file1 eksisterer ikke"

Hoveddelen her er den, som står for eller .

Der er en bedre og mere almindeligt anvendt måde at udføre den samme test på, og det er som følger:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || ekko "file1 eksisterer ikke"

Eliminering af test søgeord

Du behøver faktisk ikke bruge ordtesten til at udføre sammenligningen. Alt du skal gøre er at vedhæfte erklæringen i firkantede parenteser som følger:

-e file1.txt && echo "file1 exists" || ekko "file1 eksisterer ikke"

Og betyder stort set det samme som testen.

Nu ved du dette, kan du forbedre ved at sammenligne flere betingelser som følger:

4-eq 4 && "moo" = "moo" && echo "det er en ko" || ekko "det er ikke en ko"-e file1.txt || -e file1.doc && echo "file1 exists" || ekko "file1 eksisterer ikke"

Resumé

Testkommandoen er mere nyttig i scripts, fordi du kan teste værdien af ​​en variabel mod et andet og kontrolprogramflow. På standardkommandolinjen kan du bruge den til at teste om en fil eksisterer eller ej.