Skip to main content

Slik bruker du testbetingelser i et Bash-script

Slik bruker du kart og kompass (April 2025)

Slik bruker du kart og kompass (April 2025)
Anonim

Testkommandoen kan brukes på Linux-kommandolinjen for å sammenligne ett element mot en annen, men det er mer vanlig brukt i BASH-skalskript som en del av betingede setninger som styrer logikk og programflyt.

Et grunnleggende eksempel

Du kan prøve disse kommandoene ved å åpne et terminalvindu.

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

Kommandoen ovenfor kan brytes ned som følger:

  • test - Dette betyr at du er i ferd med å utføre en sammenligning
  • 1 - Det første elementet du skal sammenligne
  • -eq - Hvordan sammenligner du. I dette tilfellet tester du om ett tall er lik en annen.
  • 2 - Elementet du sammenligner det første elementet mot
  • && - Kjør følgende setning hvis resultatet er sant
  • ekko "ja" - Kommandoen å kjøre hvis sammenligningen returnerer sann
  • || - Kjør følgende setning hvis resultatet er feil
  • ekko "nei" - Kommandoen å kjøre hvis sammenligningen returnerer falsk

I hovedsak er kommandoen sammenlignet med 1 til 2, og hvis de samsvarer, utføres eko-ja-setningen som viser "ja", og hvis de ikke samsvarer, utføres ekko-nei-setningen som viser "nei".

Sammenligning av tall

Hvis du sammenligner elementer som analyserer som tall, kan du bruke følgende sammenligningsoperatører:

  • -eq - verdien 1 lik verdi 2
  • -ge - er verdi 1 større eller lik verdi 2
  • -gt - er verdi 1 større enn verdi 2
  • -le - er verdi 1 mindre enn eller lik verdi 2
  • -lt - er verdi 1 mindre enn verdi 2
  • -ne - betyr verdi 1 ikke lik verdi 2

eksempler

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

(viser "nei" til skjermen fordi 1 ikke er lik 2)

test 1 -ge 2 && echo "yes" || ekko "nei"

(viser "nei" til skjermen fordi 1 ikke er større eller lik 2)

test 1 -gt 2 && echo "yes" || ekko "nei"

(viser "nei" til skjermen fordi 1 ikke er større enn 2)

test 1-2 og & ekko "ja" || ekko "nei"

(viser "ja" til skjermen fordi 1 er mindre enn eller lik 2)

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

(viser "ja" til skjermen fordi 1 er mindre enn eller lik 2)

test 1 -ne 2 && echo "yes" || ekko "nei"

(viser "ja" til skjermen fordi 1 ikke er lik 2)

Sammenligning av tekst

Hvis du sammenligner elementer som analyserer som strenger, kan du bruke følgende sammenligningsoperatører:

  • = - stemmer streng 1 med streng 2
  • ! = - er streng 1 forskjellig fra streng 2
  • -n - er strenglengden større enn 0
  • -z - er strenglengden 0

eksempler

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

(viser "nei" til skjermen fordi "streng1" ikke er lik «streng2»)

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

(viser "ja" til skjermen fordi "streng1" ikke er lik «streng2»)

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

(viser "ja" til skjermen fordi "string1" har en strenglengde større enn null)

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

(viser "nei" til skjermen fordi "streng1" har en strenglengde større enn null)

Sammenligning av filer

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

  • -ef - Har filene samme enhet og inode tall (er de samme fil)
  • -nt - Er den første filen nyere enn den andre filen
  • -ot - Er den første filen eldre enn den andre filen
  • -b - Filen finnes og er blokkspesial
  • -c - Filen eksisterer og er karakter spesiell
  • -d - Filen finnes og er en katalog
  • -e - Filen eksisterer
  • -f - Filen finnes og er en vanlig fil
  • -g - Filen finnes og har det angitte gruppenummeret
  • -G - Filen finnes og eier av brukerens gruppe
  • -h - Filen eksisterer og er en symbolsk lenke
  • -k - Filen finnes og har sin klissete sett
  • -L - Det samme som -h
  • -O - ​​Filen eksisterer du er eieren
  • -p - Filen finnes og er et navngitt rør
  • -r - Filen finnes og er lesbar
  • -s - Filen eksisterer og har en størrelse større enn null
  • -S - Filen finnes og er en stikkontakt
  • -t - Filbeskrivelsen åpnes på en terminal
  • -u - Filen eksisterer og set-user-id-biten er satt
  • -w - Filen finnes og kan skrives
  • -x - Filen finnes og er kjørbar

eksempler

test / bane / til / fil1 -nt / bane / til / fil2 && ekko "ja"

(Hvis fil1 er nyere enn fil2, vil ordet "ja" bli vist)

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

(hvis fil1 eksisterer vil ordet "ja" bli vist)

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

(hvis du eier filen1 så blir ordet "ja" vist ")

Terminologi

  • Blokker spesiell - Filen er en blokk enhet som betyr at data blir lest i blokkene av byte. Disse er vanligvis enhetsfiler som harddisker.
  • Karakter spesiell - Filen handles umiddelbart når du skriver til den og er vanligvis en enhet som en seriell port

Sammenligning av flere betingelser

Hittil har alt vært å sammenligne en ting mot en annen, men hva om du vil sammenligne to forhold?

For eksempel, hvis et dyr har 4 bein og går "moo", er det sannsynligvis en ku. Bare å sjekke for 4 ben garanterer ikke at du har en ku, men kontrollerer lyden som det sikkert gjør.

For å teste begge forholdene på en gang, bruk følgende setning:

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

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

Det er en bedre og mer vanlig måte å utføre samme test på, og det er som følger:

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

En annen test du kanskje vil lage er å sammenligne to setninger, og hvis enten er sant, skriv ut en streng. Hvis du for eksempel vil kontrollere at en fil med navnet "file1.txt" eksisterer eller en fil som heter "file1.doc", kan du bruke 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 .

Det er en bedre og mer vanlig måte å utføre samme test på, og det er som følger:

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

Eliminerer Test Søkeord

Du trenger ikke å bruke ordtesten for å utføre sammenligningen. Alt du trenger å gjøre er å legge til setningen i firkantede parentes som følger:

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

Og betyr egentlig det samme som testen.

Nå vet du dette du kan forbedre ved å sammenligne flere forhold som følger:

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

Sammendrag

Testkommandoen er mer nyttig i skript fordi du kan teste verdien av en variabel mot en annen og kontrollprogramflyten. På standardkommandolinjen kan du bruke den til å teste om en fil eksisterer eller ikke.