Skip to main content

Paano Gamitin ang Kundisyon ng Pagsubok sa loob ng isang Bash Script

The Great Gildersleeve: The Houseboat / Houseboat Vacation / Marjorie Is Expecting (Mayo 2024)

The Great Gildersleeve: The Houseboat / Houseboat Vacation / Marjorie Is Expecting (Mayo 2024)
Anonim

Ang utos ng pagsubok ay maaaring gamitin sa linya ng command ng Linux upang ihambing ang isang elemento laban sa isa pa, ngunit ito ay karaniwang ginagamit sa mga script ng BASH na shell bilang bahagi ng mga kondisyong pahayag na kontrol sa lohika at daloy ng programa.

Isang Pangunahing Halimbawa

Maaari mong subukan ang mga utos na ito sa pamamagitan lamang ng pagbubukas ng terminal window.

test 1 -eq 2 && echo "yes" || echo "no"

Ang utos sa itaas ay maaaring ibasura gaya ng mga sumusunod:

  • test - Nangangahulugan ito na gagawin mo ang isang paghahambing
  • 1 - Ang unang elemento na iyong ihahambing
  • -eq - Kumusta ang iyong paghahambing. Sa kasong ito, sinusuri mo kung ang isang numero ay katumbas ng iba.
  • 2 - Ang sangkap na iyong inihahambing sa unang sangkap laban sa
  • && - Patakbuhin ang sumusunod na pahayag kung ang resulta ay totoo
  • echo "yes" - Ang utos na tumakbo kung ang paghahambing ay totoo
  • || - Patakbuhin ang sumusunod na pahayag kung ang resulta ay mali
  • echo "no" - Ang utos na tumakbo kung ang paghahambing ay bumalik mali

Sa esensya, ang utos ay paghahambing ng 1 hanggang 2 at kung tumutugma sila, ang echo na "yes" na pahayag ay pinaandar na nagpapakita ng "yes" at kung hindi sila tumutugma, ang echo "no" na pahayag ay papatayin na nagpapakita ng "no."

Paghahambing ng Mga Numero

Kung iyong hinahambing ang mga elemento na ma-parse bilang mga numero maaari mong gamitin ang sumusunod na mga operator ng paghahambing:

  • -eq - ay nagkakahalaga ng 1 katumbas na halaga 2
  • -ge - ay halaga 1 mas malaki o katumbas ng halaga 2
  • -gt - ay halaga 1 na mas malaki kaysa sa halaga 2
  • -le - ay mas mababa sa 1 halaga o katumbas ng halaga 2
  • -lt - ay mas mababa sa halaga na halaga 1 kaysa sa halaga 2
  • -ne - ang halaga 1 ay hindi pantay na halaga 2

Mga halimbawa

test 1 -eq 2 && echo "yes" || echo "no"

(nagpapakita ng "hindi" sa screen dahil 1 ay hindi katumbas 2)

test 1 -ge 2 && echo "yes" || echo "no"

(nagpapakita ng "hindi" sa screen dahil 1 ay hindi mas malaki o katumbas ng 2)

test 1 -gt 2 && echo "yes" || echo "no"

(nagpapakita ng "hindi" sa screen dahil 1 ay hindi mas malaki sa 2)

test 1 -le 2 && echo "yes" || echo "no"

(nagpapakita ng "oo" sa screen dahil 1 ay mas mababa sa o katumbas ng 2)

test 1 -lt 2 && echo "yes" || echo "no"

(nagpapakita ng "oo" sa screen dahil 1 ay mas mababa sa o katumbas ng 2)

test 1 -ne 2 && echo "yes" || echo "no"

(nagpapakita ng "oo" sa screen dahil 1 ay hindi pantay-pantay 2)

Paghahambing ng Teksto

Kung ikaw ay paghahambing ng mga elemento na ma-parse bilang mga string, maaari mong gamitin ang sumusunod na mga operator ng paghahambing:

  • = - ang string 1 match string 2
  • ! = - ay string 1 na naiiba sa string 2
  • -n - ang haba ng string na mas malaki kaysa sa 0
  • -z - ang haba ng string 0

Mga halimbawa

test "string1" = "string2" && echo "yes" || echo "no"

(nagpapakita ng "hindi" sa screen dahil ang "string1" ay hindi katumbas ng "string2")

test "string1"! = "string2" && echo "yes" || echo "no"

(nagpapakita ng "oo" sa screen dahil ang "string1" ay hindi katumbas ng "string2")

test -n "string1" && echo "yes" || echo "no"

(nagpapakita ng "oo" sa screen dahil ang "string1" ay may haba ng string na mas malaki kaysa sa zero)

test -z "string1" && echo "yes" || echo "no"

(nagpapakita ng "hindi" sa screen dahil ang "string1" ay may haba ng string na mas malaki kaysa sa zero)

Paghahambing ng mga File

Kung ikaw ay naghahambing ng mga file, maaari mong gamitin ang sumusunod na mga operator ng paghahambing:

  • -ef - Mayroon ba ang mga file na may parehong aparato at mga numero ng inode (sila ay parehong file)
  • -nt - Ang unang file ay mas bago kaysa sa pangalawang file
  • -ot - Ang unang file na mas matanda kaysa sa pangalawang file
  • -b - Ang file ay umiiral at ay humaharang ng espesyal
  • -c - Ang file ay umiiral at espesyal na character
  • -d - Ang file ay umiiral at direktoryo
  • -e - Ang file ay umiiral
  • -f - Ang file ay umiiral at isang regular na file
  • -g - Ang file ay umiiral at may tinukoy na numero ng grupo
  • -G - Ang file ay umiiral at may-ari ng grupo ng gumagamit
  • -h - Ang file ay umiiral at isang simbolikong link
  • -k - Ang file ay umiiral at may malagkit na hanay nito
  • -L - Ang parehong bilang -h
  • -O - ​​Ang umiiral na file ikaw ang may-ari
  • -p - Ang file ay umiiral at isang pinangalang tubo
  • -r - Ang file ay umiiral at nababasa
  • -s - Ang file ay umiiral at may sukat na mas malaki kaysa sa zero
  • -S - Ang file ay umiiral at isang socket
  • -t - Ang file descriptor ay binuksan sa isang terminal
  • -u - Ang file ay umiiral at ang set-user-id bit ay nakatakda
  • -w - Ang file ay umiiral at maaaring isulat
  • -x - Ang file ay umiiral at maipapatupad

Mga halimbawa

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

(Kung ang file1 ay mas bago kaysa file2 pagkatapos ang salitang "oo" ay ipapakita)

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

(kung ang file1 ay may salitang "oo" ay ipapakita)

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

(kung mayroon kang file1 pagkatapos ang salitang "oo" ay ipinapakita ")

Terminolohiya

  • I-block ang espesyal - Ang file ay isang bloke na aparato na nangangahulugan na ang data ay mababasa sa mga bloke ng bytes. Ang mga ito ay karaniwang mga file ng aparato tulad ng mga hard drive.
  • Espesyal na karakter - Ang file ay agad na kumilos kapag sumulat ka dito at karaniwang isang aparato tulad ng isang serial port

Paghahambing ng Maramihang Kondisyon

Sa ngayon, ang lahat ay nagkakumpara ng isang bagay laban sa isa pa, ngunit paano kung nais mong ihambing ang dalawang kondisyon?

Halimbawa, kung ang isang hayop ay may 4 na binti at napupunta ang "moo," baka ito ay baka. Ang pagsuri lamang para sa 4 na binti ay hindi ginagarantiyahan na mayroon kang isang baka, ngunit ang pagsuri sa tunog na ito ay tiyak na ginagawa.

Upang subukan ang parehong mga kondisyon nang sabay-sabay gamitin ang sumusunod na pahayag:

test 4 -eq 4 -a "moo" = "moo" && echo "it's a cow" || echo "ito ay hindi isang baka"

Ang pangunahing bahagi dito ay ang-na kung saan ang ibig sabihin nito at .

Mayroong isang mas mahusay at mas karaniwang ginagamit na paraan ng pagsasagawa ng parehong pagsubok at iyon ay ang mga sumusunod:

test 4 -eq 4 && test "moo" = "moo" && echo "ito ay isang baka" || echo "ito ay hindi isang baka"

Ang isa pang pagsubok na gusto mong gawin ay ang paghahambing ng dalawang pahayag at kung alinman ang totoo, magpalabas ng string. Halimbawa, kung nais mong suriin na ang isang file na may pangalang "file1.txt" ay umiiral o isang file na tinatawag na "file1.doc" ay umiiral, maaari mong gamitin ang sumusunod na command:

test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 ay hindi umiiral"

Ang pangunahing bahagi dito ay ang -o na nakatayo o .

Mayroong isang mas mahusay at mas karaniwang ginagamit na paraan ng pagsasagawa ng parehong pagsubok at iyon ay ang mga sumusunod:

test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 ay hindi umiiral"

Pag-aalis ng Test Keyword

Hindi mo talaga kailangang gamitin ang salitang pagsubok upang maisagawa ang paghahambing. Ang kailangan mo lang gawin ay isama ang pahayag sa mga square bracket tulad ng sumusunod:

-e file1.txt && echo "file1 exists" || echo "file1 ay hindi umiiral"

Ang at karaniwang nangangahulugang katulad ng pagsubok.

Ngayon alam mo na maaari mong pagbutihin ang paghahambing ng maramihang mga kondisyon tulad ng sumusunod:

4-aq 4 && "moo" = "moo" && echo "ito ay isang baka" || echo "ito ay hindi isang baka"-e file1.txt || -e file1.doc && echo "file1 exists" || echo "file1 ay hindi umiiral"

Buod

Ang command na pagsubok ay mas kapaki-pakinabang sa mga script dahil maaari mong subukan ang halaga ng isang variable laban sa isa pang at kontrolin ang daloy ng programa. Sa standard command line, maaari mo itong gamitin upang subukan kung umiiral ang isang file o hindi.