La provo-komando povas esti uzata sur la Linukso-komandlinio por kompari unu elementon kontraŭ alia sed ĝi estas pli ofte uzita en BASH-ŝkruc-skriptoj kiel parto de kondiĉaj deklaroj, kiuj regas la logikon kaj programon.
Baza Ekzemplo
Vi povas provi ĉi tiujn komandojn simple malfermante fina stacion .
provo 1 -qq 2 && eĥo "jes" || eĥo "ne"
La supre komando povas esti detruita kiel sekvas:
- provo - tio signifas, ke vi faros komparon
- 1 - la unua elemento, kiun vi komparas
- -eq (kiel vi komparas, en ĉi tiu kazo, vi provas ĉu unu nombro estas alia)
- 2 - la elemento, kiun vi denove komparas la unuan elementon
- && - kuri la sekvan deklaron se la rezulto estas vera
- eĥu "jes" - la komandon kuri se la komparo revenas vera
- || - kuru la sekvan deklaron se la rezulto estas falsa
- eĥu "ne" - la komandon kuri se la komparo revenas falsa
En esenco, la komando komparas 1 ĝis 2 kaj ili kongruas kun la eĥo "jes" deklaro ekzekutita, kiu montras "jes" kaj se ili ne kongruas la eĥo "neniu" deklaro ekzekutas, kiu montras "ne".
Komparante Nombroj
Se vi komparas elementojn, kiuj analizas la numerojn, vi povas uzi la sekvajn komparejn operaciojn:
- -eq - faras valoro 1 egala valoro 2
- -ge - estas valoro 1 pli granda aŭ egala al valoro 2
- -gt - estas valoro 1 pli granda ol valoro 2
- -le - estas valoro 1 malpli ol aŭ egala al valoro 2
- -lt - estas valoro 1 malpli ol valoro 2
- -ne - faras valoro 1 ne egala valoro 2
Ekzemploj:
provo 1 -qq 2 && eĥo "jes" || eĥo "ne"
(montras "ne" al la ekrano ĉar 1 ne egalas 2)
provo 1-a 2 && eĥo "jes" || eĥo "ne"
(montras "ne" al la ekrano ĉar 1 ne estas pli granda aŭ egala al 2)
provo 1-gt 2 && eĥo "jes" || eĥo "ne"
(montras "ne" al la ekrano ĉar 1 ne estas pli granda ol 2)
provo 1 -le 2 && eĥo "jes" || eĥo "ne"
(montras "jes" al la ekrano ĉar 1 estas malpli ol aŭ egala al 2)
provo 1 -lt 2 && eĥo "jes" || eĥo "ne"
(montras "jes" al la ekrano ĉar 1 estas malpli ol aŭ egala al 2)
provo 1 -ne 2 && eĥo "jes" || eĥo "ne"
(montras "jes" al la ekrano ĉar 1 ne egalas 2)
Komparanta Tekston
Se vi komparas elementojn, kiuj analizas kiel ŝnuroj, vi povas uzi la sekvajn komparejn operaciojn:
- = - faras ĉenon 1 kongrua ĉeno 2
- ! = - Estas kordo 1 malsama al ĉeno 2
- -n - estas la kordo longo pli granda ol 0
- -z - estas la kordo longo 0
Ekzemploj:
provu "string1" = "string2" && eĥo "jes" || eĥo "ne"
(montras "ne" al la ekrano ĉar "string1" ne egala "string2")
provu "string1"! = "string2" && eĥo "jes" || eĥo "ne"
(montras "jes" al la ekrano ĉar "string1" ne egala "string2")
provo -n "string1" && eĥo "jes" || eĥo "ne"
(montras "jes" al la ekrano ĉar "string1" havas pli longan ŝnuron pli ol nulo)
provo -z "string1" && eĥo "jes" || eĥo "ne"
(montras "ne" al la ekrano ĉar "string1" havas pli longan ŝnuron pli ol nulo)
Komparante Dosierojn
Se vi komparas dosierojn, vi povas uzi la sekvajn kompilajn operaciojn:
- -ef - Ĉu la dosieroj havas la saman aparaton kaj inodejojn (ĉu ili estas la sama dosiero)
- -nt - Ĉu la unua dosiero estas pli nova ol la dua dosiero
- -ot - Ĉu la unua dosiero estas pli malnova ol la dua dosiero
- -b - La dosiero ekzistas kaj estas bloko speciala
- -c - La dosiero ekzistas kaj estas speciala karaktero
- -d - La dosiero ekzistas kaj estas dosierujo
- -e - La dosiero ekzistas
- -f - La dosiero ekzistas kaj estas regula dosiero
- -g - La dosiero ekzistas kaj havas la specifitan grupan numeron
- -G - La dosiero ekzistas kaj posedanto de la grupo de uzanto
- -h - La dosiero ekzistas kaj estas simbola ligo
- -k - La dosiero ekzistas kaj havas ĝia glueca aro
- -L - La sama kiel -h
- -O - La dosiero ekzistas, vi estas la posedanto
- -p - La dosiero ekzistas kaj estas nomata tubaro
- -r - La dosiero ekzistas kaj estas legebla
- -s - La dosiero ekzistas kaj havas grandecon pli granda ol nulo
- -S - La dosiero ekzistas kaj estas socket
- -t - La dosiero-priskribilo estas malfermita sur fina stacio
- -u - La dosiero ekzistas kaj la aro-uzanto-id baro estas aro
- -w - La dosiero ekzistas kaj estas skribebla
- -x - La dosiero ekzistas kaj estas egecutable
Ekzemploj:
provo / path / to / file1 -n / path / to / file2 && eĥo "jes"
(Se file1 estas pli nova ol dosiero2 tiam la vorto "jes" estos montrata)
provo -e / path / to / file1 && eĥo "jes"
(se file1 ekzistas la vorto "jes" estos montrata)
provo -O / path / to / file1 && eĥo "jes"
(se vi posedas dosieron1 tiam la vorto "jes" estas montrata)
Terminologio
- Bloko speciala - La dosiero estas bloko-aparato, kiu signifas, ke datumoj estas legataj en blokoj de bajtoj. Ĉi tiuj estas ĝenerale mekanismaj dosieroj kiel malmolaj diskoj.
- Speciala karaktero - La dosiero agas tuj kiam vi skribas al ĝi kaj ofte estas aparato kiel seria haveno
Komparante Multoblajn Kondiĉojn
Ĝis nun ĉio komparas unu aferon kontraŭ alia sed kio, se vi volas kompari du kondiĉojn.
Ekzemple, se besto havas 4 krurojn kaj iras "moo" ĝi verŝajne estas bovino. Simple kontrolanta por 4 faltoj ne garantias, ke vi havas bovinon, sed kontrolas la sonon, kiun ĝi verŝajne faras.
Por provi ambaŭ kondiĉojn tuj uzu la jenan deklaron:
provo 4 -qq 4 -a "moo" = "moo" && eĥo "ĝi estas bovino" || eĥo "ĝi ne estas bovino"
La ŝlosila parto ĉi tie estas la -a kiu staras por kaj.
Estas pli bona kaj pli komune uzita maniero fari la saman teston kaj jen estas:
provo 4 -eq 4 && test "moo" = "moo" && echo "ĝi estas bovino" || eĥo "ĝi ne estas bovino"
Alia provo, kiun vi volas fari, komparas du deklarojn kaj se ĉu estas vera eligo, ĉeno. Ekzemple, se vi volas kontroli, ke ekzistas dosiero nomata "file1.txt" aŭ ekzistas dosiero nomata "file1.doc", vi povas uzi la jenan komandon
test -e file1.txt -o -e file1.doc && echo "file1 exists" || eĥo "file1 does not exist"
La ŝlosila parto ĉi tie estas la -o kiu staras por aŭ.
Estas pli bona kaj pli komune uzita maniero fari la saman teston kaj jen estas:
provo -e file1.txt || test -e file1.doc && echo "file1 exists" || eĥo "file1 does not exist"
Forigi La Teston-Ŝlosilvorton
Vi ne bezonas uzi la vortan provon por realigi la komparo. Ĉio, kion vi devas fari estas alklaki la deklaron en kvadrata krampoj kiel sekvas:
[-e file1.txt] && echo "file1 exists" || eĥo "file1 does not exist"
La [kaj] esence signifas la saman provon.
Nun vi scias, ke vi povas plibonigi komparante multajn kondiĉojn kiel sekvas:
[4-aq 4] && ["moo" = "moo"] && eĥo "ĝi estas bovino" || eĥo "ĝi ne estas bovino"
[-e dosiero1.txt] || [-e file1.doc] && echo "file1 exists" || eĥo "file1 does not exist"
Resumo
La provo-komando estas pli utila en skriptoj ĉar vi povas provi la valoron de unu variablo kontraŭ alia kaj kontrolo-programo fluo. Sur la norma komandlinio, vi povas uzi ĝin por provi ĉu ekzistas dosiero aŭ