Ang utos ng pagsubok ay maaaring gamitin sa linya ng command ng Linux upang ihambing ang isang elemento laban sa isa pang ngunit ito ay mas karaniwang ginagamit sa mga script ng shell ng BASH bilang bahagi ng mga kondisyong pahayag na kumokontrol 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 - ito ay nangangahulugan na ikaw ay gagawa ng paghahambing
- 1 - ang unang elemento na iyong ihahambing
- -eq (kung paano mo tinutukoy, sa kasong ito, sinusuri mo kung ang isang numero ay katumbas ng isa pa)
- 2 - ang elemento na iyong hinahambing muli ang unang elemento
- && - patakbuhin ang sumusunod na pahayag kung ang resulta ay totoo
- echo "oo" - 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 kakanyahan, ang utos ay paghahambing ng 1 hanggang 2 at tumutugma sila sa echo na "yes" na pahayag ay pinaandar na nagpapakita ng "oo" at kung hindi 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 iyong hinahambing ang 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 -n / 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 nagkukumpara ng isang bagay laban sa isa pang ngunit kung ano kung nais mong ihambing ang dalawang kondisyon.
Halimbawa, kung ang isang hayop ay may 4 na binti at napupunta ang "moo" marahil ito ay isang baka. Ang pagsuri lamang para sa 4 na binti ay hindi ginagarantiyahan na mayroon kang isang baka ngunit sinusuri ang 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 ay kumakatawan sa 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 paghahambing ng dalawang pahayag at kung ang alinman ay totoo ang output ng isang 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 para sa 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