L'ordre de prova es pot utilitzar a la línia de comandaments de Linux per comparar un element amb un altre, però s'utilitza més sovint en els scripts del shell de BASH com a part de les frases condicionals que controlen la lògica i el flux del programa.
Un exemple bàsic
Podeu provar aquests comandaments simplement obrint una finestra de terminal .
prova 1 -eq 2 i & echo "sí" || eco "no"
L'ordre anterior es pot desglossar de la manera següent:
- prova - això vol dir que esteu a punt de fer una comparació
- 1: el primer element que vas a comparar
- -eq (com es compara, en aquest cas, està provant si un número és igual a un altre)
- 2: l'element que esteu tornant a comparar el primer element
- && - executeu la següent instrucció si el resultat és veritable
- echo "sí": l'ordre a executar si la comparació es torna true
- || - executeu la següent instrucció si el resultat és fals
- echo "no": la comanda que s'executarà si la comparació es torna falsa
En essència, la comanda està comparant 1 a 2 i coincideixen amb la instrucció echo "yes" que s'executa que mostra "sí" i si no coincideixen amb la instrucció "no", s'executa que mostra "no".
Comparant números
Si comparem elements que analitzen com a números, podeu utilitzar els següents operadors de comparació:
- -eq - val 1 igual valor 2
- -ge - és el valor 1 major o igual al valor 2
- -gt - és el valor 1 major que el valor 2
- -le - té un valor 1 inferior o igual al valor 2
- -lt - és el valor 1 menys del valor 2
- -ne - fa que el valor 1 no sigui igual a valor 2
Exemples:
prova 1 -eq 2 i & echo "sí" || eco "no"
(mostra "no" a la pantalla perquè 1 no és igual a 2)
prova 1 -ge 2 i & echo "sí" || eco "no"
(mostra "no" a la pantalla perquè 1 no és major ni igual a 2)
prova 1 -gt 2 i & echo "sí" || eco "no"
(mostra "no" a la pantalla perquè 1 no és superior a 2)
prova 1 -le 2 i & echo "sí" || eco "no"
(mostra "sí" a la pantalla perquè 1 és menor o igual que 2)
prova 1 -lt 2 i & echo "sí" || eco "no"
(mostra "sí" a la pantalla perquè 1 és menor o igual que 2)
prova 1-ne 2 i & echo "sí" || eco "no"
(mostra "sí" a la pantalla perquè 1 no és igual a 2)
Comparació de text
Si comparem elements que analitzen com a cadenes, podeu utilitzar els següents operadors de comparació:
- = - fa cadena 1 cadena de coincidència 2
- ! = - és cadena 1 diferent a la cadena 2
- -n - és la longitud de cadena superior a 0
- -z - és la cadena de longitud 0
Exemples:
prova "string1" = "string2" && echo "yes" || eco "no"
(mostra "no" a la pantalla perquè "string1" no és igual a "string2")
prova "string1"! = "string2" && echo "yes" || eco "no"
(mostra "sí" a la pantalla perquè "string1" no és igual a "string2")
test -n "string1" && echo "yes" || eco "no"
(mostra "sí" a la pantalla perquè "string1" té una longitud de cadena superior a zero)
prova -z "string1" && echo "yes" || eco "no"
(mostra "no" a la pantalla perquè "string1" té una longitud de cadena superior a zero)
Comparant fitxers
Si comparem fitxers, podeu utilitzar els següents operadors de comparació:
- -ef: els fitxers tenen el mateix dispositiu i els nombres d'inode (són el mateix arxiu)
- -nt - És el primer fitxer més nou que el segon fitxer
- -ot - És el primer fitxer més antic que el segon fitxer
- -b - El fitxer existeix i és un bloc especial
- -c - El fitxer existeix i és un caràcter especial
- -d - El fitxer existeix i és un directori
- -e - El fitxer existeix
- -f - El fitxer existeix i és un fitxer normal
- -g - El fitxer existeix i té el número de grup especificat
- -G - El fitxer existeix i el propietari del grup de l'usuari
- -h - El fitxer existeix i és un enllaç simbòlic
- -k - El fitxer existeix i té el seu conjunt de bits enganxosos
- -L - El mateix que -h
- -O - El fitxer existeix que sou el propietari
- -p - El fitxer existeix i és una canonada amb nom
- -r - El fitxer existeix i es pot llegir
- -s - El fitxer existeix i té una mida major que zero
- -S - El fitxer existeix i és un socket
- -t - El descriptor de fitxer s'obre en un terminal
- -u - El fitxer existeix i s'estableix la bit id-user-id
- -w - El fitxer existeix i es pot escriure
- -x - El fitxer existeix i és executable
Exemples:
test / path / to / file1 -n / path / to / file2 i & echo "yes"
(Si el fitxer 1 és més nou que el fitxer2, es mostrarà la paraula "sí")
test -e / path / to / file1 && echo "yes"
(si file1 existeix, la paraula "sí" es mostrarà)
test-O / path / to / file1 && echo "yes"
(si teniu el fitxer 1, es mostrarà la paraula "sí")
Terminologia
- Bloc especial: el fitxer és un dispositiu de bloc que vol dir que les dades es llegeixen en blocs de bytes. Normalment són fitxers de dispositius, com ara discs durs.
- Caràcter especial: el fitxer s'activa immediatament quan l'escriviu i normalment és un dispositiu, com ara un port sèrie
Comparant diverses condicions
Fins aquí tot ha estat comparant una cosa amb l'altra, però si voleu comparar dues condicions.
Per exemple, si un animal té 4 potes i va "moo" és probablement una vaca. Simplement, revisar 4 potes no garanteix que tingueu una vaca, sinó que comprova el so que segurament ho fa.
Per comprovar ambdues condicions alhora, utilitzeu la següent instrucció:
prova 4 -eq 4 -a "moo" = "moo" & & echo "és una vaca" || ressò "no és una vaca"
La part clau aquí és la -a que representa i.
Hi ha una manera millor i més usada de fer la mateixa prova i això és el següent:
prova 4 -eq 4 && test "moo" = "moo" & & echo "és una vaca" || ressò "no és una vaca"
Una altra prova que vulgueu fer és comparar dues expressions i, si és vertader, sortir una cadena. Per exemple, si voleu comprovar que existeix un fitxer anomenat "file1.txt" o existeix un fitxer anomenat "file1.doc", podeu utilitzar l'ordre següent
test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 does not exist"
La part clau aquí és la -o que significa o.
Hi ha una manera millor i més usada de fer la mateixa prova i això és el següent:
test -e file1.txt || test -e file1.doc && echo "file1 exists" || echo "file1 does not exist"
Eliminació de la paraula clau de prova
De fet, no cal utilitzar la prova de paraules per realitzar la comparació. Tot el que heu de fer és incloure la declaració entre claudàtors de la següent manera:
[-e file1.txt] && echo "file1 exists" || echo "file1 does not exist"
El [i] bàsicament significa el mateix que el test.
Ara sabeu que podeu millorar en comparar diverses condicions de la següent manera:
[4-eq 4] && ["moo" = "moo"] && echo "és una vaca" || ressò "no és una vaca"
[-e file1.txt] || [-e file1.doc] && echo "file1 exists" || echo "file1 does not exist"
Resum
L'ordre de prova és més útil en els scripts perquè podeu provar el valor d'una variable contra un altre i controlar el flux del programa. A la línia d'ordres estàndard, podeu utilitzar-lo per comprovar si un fitxer existeix o