Sucesso do comando de verificação do script do shell Linux [duplicado]

1

Eu preciso verificar o comando executado é sucesso ou não, eu coloquei o código abaixo em test.sh executá-lo, o que dá a lista listando o conteúdo de /home , mas há um aviso

./test.sh: 3: ./test.sh: [[: not found

O que há de errado no comando abaixo

#!/bin/sh
ls /home/
if [[ "$?" != 0 ]]; then
echo "Commnad Error"
else
echo "Commnad Success"
fi
    
por Haris 05.12.2016 / 14:44

4 respostas

3

De acordo com o erro:

./test.sh: 3: ./test.sh: [[: not found

Seu /bin/sh não é bash e [[ é específico do bash. Use o único colchete [ ou test por si só.
E também use -ne para condicionais numéricos. != funcionará no seu caso específico, mas é uma prática ruim.

    
por 05.12.2016 / 14:58
2

O erro está em if [[ "$?" != 0 ]]; then

A comparação de números

não é feita usando != Em vez disso, -ne deve ser usado.

Leia aqui para comparação numérica

Além disso, a sintaxe correta para o status do último código de saída de comando executado é $? sem as aspas.

if [[ $? -ne 0 ]]; then

    
por 05.12.2016 / 14:47
1

Eu suponho que você esteja usando dash para executar o script porque /bin/sh é link , então você pode usar bash como #!/bin/bash , e então esse aviso

    
por 05.12.2016 / 14:58
0

O traço não tem [[ , apenas [ . Mas mesmo com [ , há motivos para preferir if your_command over your_command; if [ $? = 0 ] . (O primeiro é mais direto, mais rápido e resiliente a falhas no modo set -e ).

    
por 05.12.2016 / 15:06