script de shell busybox - mensagem de erro de operando desconhecido

1

Eu preciso escrever um pequeno script de shell que irá executar um script python e obter os resultados.

Quando tento executá-lo dessa maneira, funciona:

#!/bin/sh
/usr/bin/python /etc/scripts/backup.py
result=$?

if [ $result -gt 0 ];
    then echo 'PROBLEM';
else
    echo 'OK';
fi

Mas se eu tentar fazer assim, ele falhará:

#!/bin/sh
if [ $(/usr/bin/python /etc/scripts/backup.py) -gt 0 ];
    then echo 'PROBLEM';
else
    echo 'OK';
fi

Ele retorna:

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK

E os resultados estão errados. Deve estar imprimindo "PROBLEM" "em vez de OK.

o que tentei até agora

if [ $(/usr/bin/python /etc/scripts/backup.py) -ne 0 ];

retorna

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: 0: unknown operand
OK

E eu também tentei isso:

if [ "$(/usr/bin/python /etc/scripts/backup.py)" -gt 0 ];

retorna:

lab-1:/etc/scripts# ./audit_test_wrapper.sh
sh: out of range
OK

Alguém pode me apontar na direção certa?

Obrigado.

    
por dot 27.06.2018 / 16:13

1 resposta

2

Um comando não retorna seu status de saída ( $? ) na saída padrão. Uma substituição de comando ( $(...) ) captura a saída padrão.

Em vez disso, basta fazer

#!/bin/sh

if ! /usr/bin/python /etc/scripts/backup.py; then
   echo 'PROBLEM'
else
   echo 'OK'
fi

Isso selecionaria a primeira ramificação e imprimiria PROBLEM se o script python saísse com um status de saída diferente de zero.

Você pode ler a instrução if como "Se o script não foi bem-sucedido".

Se você quiser se livrar do ! :

#!/bin/sh

if /usr/bin/python /etc/scripts/backup.py; then
   echo 'OK'
else
   echo 'PROBLEM'
fi

Você pode ler a instrução if como "Se o script foi bem-sucedido".

O erro que você recebe vem do fato de que o script não produz nada, o que significa que a substituição do comando estará vazia. Como não é citada, o comando que o shell tentará executar será parecido com

if [ -gt 0 ]

Este é um erro de sintaxe.

Ao citar a substituição do comando, você essencialmente tenta executar

if [ "" -gt 0 ]

e o shell não é capaz de comparar a string vazia como um inteiro.

    
por 27.06.2018 / 16:24