Condições e o Comando test - Linux
Comando test
O comando test verifica a correspondência a uma determinada condição. Ele aceita as seguintes opções:
: verifica setest -e $1
é um arquivo.$1
: verifica setest -f $1
é um arquivo regular, não um arquivo de dispositivo, diretório ou executável.$1
: verifica setest -d $1
é um diretório.$1
: verifica setest -x $1
é um executável. Observe que você também pode verificar outras permissões, como$1
, que verifica se a permissão SGID está configurada.-g
: verifica setest $1 -nt $2
é mais recente que$1
.$2
: verifica setest $1 -ot $2
é mais antigo que$1
.$2
: verifica se os númerostest $1 -eq $2
e$1
são iguais.$2
: verifica se os númerostest $1 -ne $2
e$1
não são iguais.$2
: verifica se o númerotest $1 -gt $2
é maior que o número$1
.$2
: verifica se o númerotest $1 -lt $2
é menor que o número$1
.$2
: verifica se o númerotest $1 -ge $2
é maior ou igual ao número$1
.$2
: verifica se o númerotest $1 -le $2
é menor ou igual ao número$1
.$2
: verifica se a variáveltest -z $1
é uma string vazia.$1
: verifica se a variáveltest $1
está definida e não vazia.$1
: verifica se as stringstest $1=$2
e$1
são iguais.$2
: verifica se as stringstest $1 != $2
e$1
são diferentes. Você também pode usar$2
com todos os outros comandos!
para verificar a negação de uma afirmação.test
Para verificar condições, também é possível usar uma forma abreviada, onde todo o comando é colocado entre colchetes e a palavra test
test -f $1
[ -f $1 ]
Combinação de Condições
Com os operadores especiais &&
||
: secomando1 && comando2
for bem-sucedido,comando1
será executado.comando2
: secomando1 || comando2
falhar,comando1
será executado.comando2
Os operandos dessas operações são comandos (qualquer comando). Frequentemente, essas operações usam a condição do comando test
Por exemplo, para verificar se $path
[ -f $path ] && echo $path is a file
A condição inversa seria assim:
[ -f $path ] || echo $path is not a file
Exemplo completo
programicio@Programicio:~$ path=~/Documents/hello.txt programicio@Programicio:~$ [ -f $path ] && echo $path is a file /home/programicio/Documents/hello.txt is a file programicio@Programicio:~$ path=~/Documents/ programicio@Programicio:~$ [ -f $path ] && echo $path is a file programicio@Programicio:~$ [ -f $path ] || echo $path is not a file /home/programicio/Documents/ is not a file
Os operadores &&
||
programicio@Programicio:~$ echo "hello" && echo "world" hello world
Aqui, dois comandos echo
&&
echo "world"
Outro exemplo:
programicio@Programicio:~$ mkdir ~/Documents/test3 && echo "Folder created" Folder created
Aqui, o segundo comando, que exibe a mensagem, é executado se a pasta /Documents/test3
programicio@Programicio:~$ mkdir ~/Documents/test3 && echo "Folder created" mkdir: cannot create directory '/home/programicio/Documents/test3': File exists
Neste caso, como a pasta já havia sido criada anteriormente, ocorre um erro e o segundo comando não é executado.
O operador ||
programicio@Programicio:~$ mkdir ~/Documents/test3 || echo "Unable to create a folder" mkdir: cannot create directory '/home/programicio/Documents/test3': File exists Unable to create a folder
De fato, este é o exemplo anterior, onde novamente não é possível criar a pasta no diretório raiz. Como o primeiro comando falha, o segundo comando, que exibe a mensagem apropriada, é executado.
Também podemos combinar ambos os operadores para criar condições mais complexas:
programicio@Programicio:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder" Folder created programicio@Programicio:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder" mkdir: cannot create directory '/home/programicio/Documents/test4': File exists Unable to create a folder
programicio@Programicio:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder" Folder created programicio@Programicio:~$ mkdir ~/Documents/test4 && echo "Folder created" || echo "Unable to create a folder" mkdir: cannot create directory '/home/programicio/Documents/test4': File exists Unable to create a folder
Aqui, combinamos três comandos. O primeiro comando cria a pasta:
mkdir ~/Documents/test4
Se a pasta for criada com sucesso, o segundo comando será executado:
echo "Folder created"
Se houver um erro ao criar a pasta, o terceiro comando será executado:
echo "Unable to create a folder"