O comando de proba pódese empregar na liña de comandos de Linux para comparar un elemento contra outro, pero úsase máis comúnmente nos scripts de shell de BASH como parte das declaracións condicionais que controlan a lóxica eo fluxo do programa.
Un exemplo básico
Podes probar estes comandos simplemente abrindo unha fiestra de terminal .
proba 1 -eq 2 e & echo "si" || eco "non"
O comando anterior pódese dividir do seguinte xeito:
- proba - isto significa que estás a piques de realizar unha comparación
- 1 - O primeiro elemento que vas comparar
- -eq (como estas comparando, neste caso, está probando se un número é igual a outro)
- 2 - o elemento que está a comparar o primeiro elemento de novo
- && - executa a seguinte declaración se o resultado é verdadeiro
- eco "si" - o comando a executar se a comparación volve verdadeira
- || - Executa a seguinte declaración se o resultado é falso
- eco "non" - o comando a executar se a comparación devolve falsa
En esencia, o comando está comparando 1 a 2 e coinciden coa eco "afirmación" se executa que mostra "si" e se non coinciden co eco non se executa a sinalización que mostra "non".
Comparando números
Se está a comparar elementos que analizan como números, pode usar os seguintes operadores de comparación:
- -eq: valor 1 igual valor 2
- -ge - é o valor 1 maior ou igual ao valor 2
- -gt - é o valor 1 maior que o valor 2
- -le - é o valor 1 inferior ou igual ao valor 2
- -lt - é o valor 1 menos que o valor 2
- -ne - valor 1 non igual valor 2
Exemplos:
proba 1 -eq 2 e & echo "si" || eco "non"
(mostra "non" na pantalla porque 1 non é igual a 2)
proba 1 -ge 2 e & echo "si" || eco "non"
(mostra "non" na pantalla porque 1 non é maior ou igual a 2)
proba 1 -gt 2 e & echo "si" || eco "non"
(mostra "non" na pantalla porque 1 non é maior que 2)
proba 1 -le 2 e & echo "si" || eco "non"
(mostra "si" na pantalla porque 1 é menor ou igual que 2)
proba 1 -lt 2 e & echo "si" || eco "non"
(mostra "si" na pantalla porque 1 é menor ou igual que 2)
proba 1 -ne 2 e & echo "si" || eco "non"
(mostra "si" na pantalla porque 1 non é igual a 2)
Comparación de texto
Se está a comparar elementos que analizan como cadeas pode usar os seguintes operadores de comparación:
- = - fai a corda 1 coinciden coa cadea 2
- ! = - é a cadea 1 diferente á cadea 2
- -n - é a lonxitude de corda superior a 0
- -z - é a lonxitude da corda 0
Exemplos:
proba "string1" = "string2" && echo "yes" || eco "non"
(mostra "non" na pantalla porque "string1" non equivale a "string2")
proba "string1"! = "string2" && echo "si" || eco "non"
(mostra "si" na pantalla porque "string1" non é igual a "string2")
proba -n "string1" e & echo "si" || eco "non"
(mostra "si" na pantalla porque "string1" ten unha lonxitude de corda superior a cero)
proba -z "string1" && echo "si" || eco "non"
(mostra "non" na pantalla porque "string1" ten unha lonxitude de cadea maior que cero)
Comparando ficheiros
Se está a comparar ficheiros pode usar os seguintes operadores de comparación:
- -ef - Os ficheiros teñen o mesmo dispositivo e números de inodoro (son o mesmo ficheiro)
- -nt - O primeiro arquivo máis novo que o segundo ficheiro
- -ot - É o primeiro ficheiro máis antigo que o segundo ficheiro
- -b - O ficheiro existe e é bloque especial
- -c - O ficheiro existe e é un carácter especial
- -d - O ficheiro existe e é un directorio
- -e - O ficheiro existe
- -f - O ficheiro existe e é un ficheiro normal
- -g - O ficheiro existe e ten o número de grupo especificado
- -G - O arquivo existe e é propietario polo grupo do usuario
- -h - O ficheiro existe e é un enlace simbólico
- -k - O ficheiro existe e ten o seu conxunto de bits pegajoso
- -L - O mesmo que -h
- -O - O ficheiro existe é o propietario
- -p - O ficheiro existe e é un tubo nomeado
- -r - O ficheiro existe e é lexíbel
- -s - O ficheiro existe e ten un tamaño maior que cero
- -S - O ficheiro existe e é un socket
- -t - O descriptor de ficheiro está aberto nun terminal
- -u - O ficheiro existe eo bit set-user-id está configurado
- -w - O ficheiro existe e é escribíbel
- -x - O ficheiro existe e é executable
Exemplos:
test / path / to / file1 -n / path / to / file2 e & echo "yes"
(Se o ficheiro 1 é máis novo que o ficheiro2, aparecerá a palabra "si")
proba -e / path / para / file1 e & echo "si"
(se file1 existe a palabra "si" aparecerá)
proba -O / path / para / file1 e & echo "si"
(se ten o ficheiro 1, aparece a palabra "si")
Terminoloxía
- Bloque especial: o ficheiro é un dispositivo de bloque que significa que os datos son lidos en bloques de bytes. Estes son xeralmente ficheiros de dispositivos como discos duros.
- Carácter especial: o ficheiro actívase inmediatamente cando se escribe e é comúnmente un dispositivo como un porto serie
Comparando varias condicións
Ata agora, todo estivo comparando unha cousa contra outra pero que se quere comparar dúas condicións.
Por exemplo, se un animal ten 4 patas e vai "moo", probablemente sexa unha vaca. Simplemente comprobando 4 patas non garante que teña unha vaca senón que comprobe o son que seguramente fai.
Para probar as dúas condicións á vez use a seguinte declaración:
proba 4 -eq 4 -a "moo" = "moo" && echo "é unha vaca" || eco "non é unha vaca"
A parte clave aquí é a -a que representa e.
Existe unha mellor e máis utilizada forma de realizar a mesma proba e é a seguinte:
proba 4 -eq 4 && test "moo" = "moo" && echo "é unha vaca" || eco "non é unha vaca"
Outra proba que podes querer facer é comparar dúas declaracións e se algunha das dúas é certa saia unha cadea. Por exemplo, se quere comprobar que existe un ficheiro chamado "file1.txt" ou existe un ficheiro chamado "file1.doc" pode usar o seguinte comando
test -e file1.txt -o -e file1.doc && echo "file1 exists" || echo "file1 does not exist"
A parte clave aquí é a -o que significa ou.
Existe unha mellor e máis utilizada forma de realizar a mesma proba e é a seguinte:
test -e file1.txt || proba -e file1.doc e & echo "file1 existe" || echo "file1 does not exist"
Eliminando a palabra clave de proba
En realidade non precisa usar a proba de palabras para realizar a comparación. Todo o que tes que facer é incluír o enunciado entre corchetes do seguinte xeito:
[-e file1.txt] && echo "file1 existe" || echo "file1 does not exist"
O [e] basicamente significa o mesmo que o de proba.
Agora xa sabes isto podes mellorar ao comparar varias condicións como segue:
[4 -eq 4] && ["moo" = "moo"] && echo "é unha vaca" || eco "non é unha vaca"
[-e file1.txt] || [-e file1.doc] && echo "file1 existe" || echo "file1 does not exist"
Resumo
O comando de proba é máis útil nos scripts porque pode probar o valor dunha variable contra outra e controlar o fluxo do programa. Na liña de comando estándar, pode usalo para probar se existe un ficheiro ou