Hoe om toetstoestande te gebruik binne 'n basiese skripsie

Die toets opdrag kan op die Linux-opdraglyn gebruik word om een ​​element teen 'n ander te vergelyk, maar dit word meer algemeen in BASH-skripskripsies gebruik as deel van voorwaardelike stellings wat logika en programvloei beheer.

'N Basiese voorbeeld

U kan hierdie opdragte probeer deur bloot 'n terminale venster oop te maak .

toets 1-eq 2 & & echo "ja" || echo "nee"

Bogenoemde opdrag kan soos volg afgebreek word:

In wese is die opdrag vergelyk 1 tot 2 en hulle stem ooreen met die echo "ja" stelling word uitgevoer wat "ja" vertoon en as hulle nie ooreenstem met die echo word "nee" stelling uitgevoer wat "nee" vertoon.

Vergelyking van getalle

As u elemente vergelyk wat as nommers ontleed word, kan u die volgende vergelykingsoperateurs gebruik:

voorbeelde:

toets 1-eq 2 & & echo "ja" || echo "nee"

(vertoon "nee" na die skerm omdat 1 nie gelyk is nie 2)

toets 1-gaan 2 & & echo "ja" || echo "nee"

(vertoon "nee" na die skerm omdat 1 nie groter of gelyk is aan 2 nie)

toets 1 -gt 2 & & echo "yes" || echo "nee"

(vertoon "nee" na die skerm omdat 1 nie groter is as 2 nie)

toets 1-le 2 & & echo "ja" | echo "nee"

(vertoon "ja" op die skerm omdat 1 minder of gelyk is aan 2)

toets 1-lt 2 & & echo "ja" || echo "nee"

(vertoon "ja" op die skerm omdat 1 minder of gelyk is aan 2)

toets 1 -ne 2 & & echo "ja" || echo "nee"

(vertoon "ja" op die skerm omdat 1 nie gelyk is nie 2)

Vergelyking van teks

As u elemente vergelyk wat as stringe ontleed, kan u die volgende vergelykingoperateurs gebruik:

voorbeelde:

toets "string1" = "string2" && echo "yes" || echo "nee"

(vertoon "nee" na die skerm omdat "string1" nie gelyk is aan "string2" nie)

toets "string1"! = "string2" && echo "yes" || echo "nee"

(vertoon "ja" op die skerm omdat "string1" nie gelyk is aan "string2" nie)

toets -n "string1" & & echo "ja" || echo "nee"

(vertoon "ja" op die skerm omdat "string1" 'n stringlengte groter as nul het)

toets -z "string1" & & echo "ja" || echo "nee"

(vertoon "nee" na die skerm omdat "string1" 'n snaarlengte groter as nul het)

Vergelyking van lêers

As u lêers vergelyk, kan u die volgende vergelykingoperateurs gebruik:

voorbeelde:

toets / pad / na / lêer1 -n / pad / na / lêer2 & & echo "ja"

(As file1 nuwer is as file2 dan sal die woord "ja" vertoon word)

toets -e / pad / na / lêer1 & & echo "ja"

(as lêer1 bestaan, sal die woord "ja" vertoon word)

toets -O / pad / na / lêer1 & & echo "ja"

(as u eie lêer1 het, word die woord "ja" vertoon)

terminologie

Vergelyking van verskeie voorwaardes

Tot dusver het alles een ding vergelyk met 'n ander, maar wat as jy twee toestande wil vergelyk.

Byvoorbeeld, as 'n dier 4 bene het en "moo" gaan, is dit waarskynlik 'n koei. Om eenvoudig te kyk vir 4 bene waarborg nie dat jy 'n koei het nie, maar om die klank wat dit sekerlik doen, te monitor.

Om beide toestande gelyktydig te toets, gebruik die volgende stelling:

toets 4-eq 4 -a "moo" = "moo" & & echo "dit is 'n koei" || eggo "dit is nie 'n koei nie"

Die belangrikste deel hier is die -a wat staan ​​vir en.

Daar is 'n beter en meer algemeen gebruikte manier om dieselfde toets te doen en dit is soos volg:

toets 4-eq 4 & & toets "moo" = "moo" & & echo "dit is 'n koei" | eggo "dit is nie 'n koei nie"

Nog 'n toets wat jy dalk wil maak, is om twee stellings te vergelyk, en as een van die waardes is, is dit 'n tou. As u byvoorbeeld wil kontroleer of daar 'n lêer met die naam "file1.txt" bestaan ​​of 'n lêer genaamd "file1.doc" bestaan, kan u die volgende opdrag gebruik

toets -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 bestaan ​​nie"

Die belangrikste deel hier is die -of wat staan ​​vir of.

Daar is 'n beter en meer algemeen gebruikte manier om dieselfde toets te doen en dit is soos volg:

toets -e file1.txt || toets -e file1.doc && echo "file1 exists" || echo "file1 bestaan ​​nie"

Die Toets Sleutelwoord Elimineer

Jy hoef nie die woordtoets te gebruik om die vergelyking uit te voer nie. Al wat jy hoef te doen is om die stelling in vierkantige hakies soos volg in te sluit:

[-e file1.txt] && echo "lêer1 bestaan" || echo "file1 bestaan ​​nie"

Die [en] beteken basies dieselfde as toets.

Nou weet jy dit kan jy verbeter as jy veelvuldige toestande vergelyk soos volg:

[4-e 4] && ["moo" = "moo"] & & echo "dit is 'n koei" | eggo "dit is nie 'n koei nie"

[-e file1.txt] | | [-e file1.doc] && echo "file1 exists" | echo "file1 bestaan ​​nie"

opsomming

Die toets opdrag is nuttiger in skrifte omdat jy die waarde van een veranderlike teen 'n ander kan toets en die programprogram vloei. Op die standaard opdrag reël kan u dit gebruik om te toets of 'n lêer bestaan ​​of