= 0 comando não encontrado bash

-1
grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else    
     exit
fi

o erro é:

/home/erawson/bin/try1: line 10: =: command not found
    
por SamFlynn 11.06.2015 / 13:37

4 respostas

4

altere a instrução if para if [ $CHK -eq 0 ]; then . Observe os espaços entre as chaves quadradas.

O CHK variável também deve ser atribuído como CHK=$(echo $?) .

Aqui está o script como deve ser:

#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt    
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
        echo "failed"
else
    exit
fi
    
por Sergiy Kolodyazhnyy 11.06.2015 / 13:40
3

Você tem alguns erros de sintaxe, como já foi apontado. Você também parece estar usando uma lógica falha. Um status de saída de 0 significa que o comando foi bem-sucedido, não que falhou. Se o que você deseja é imprimir failed se o arquivo não corresponder à string de consulta, tudo que você precisa é:

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"

Se você quiser imprimir failed se o arquivo corresponder a string, use isto:

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"

Não há necessidade de salvar o status de saída e não há necessidade de uma verificação if / else.

    
por terdon 11.06.2015 / 14:17
2

Pelo que entendi, sua exigência é: Se você obter a saída para a string grepping ":: = BEGIN", você quer eco "falhou" .. certo ?? E não sei por que você usou ";" depois se ... novamente usado "então"

você pode tentar o seguinte


if [ -n 'grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib' ]
then
        echo "failed"
else
        exit
fi

Espero que isso ajude !! (de acordo com minhas suposições)

    
por New Chethan 11.06.2015 / 14:05
2

Você só precisa de um par extra de parênteses:

grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
    echo "failed"
else
    exit
fi
  • A sintaxe correta do operador aritmético é ((

  • Além disso, como você está usando apenas o código de saída $? , não é necessário salvá-lo em outra variável. Você pode usá-lo diretamente.

Isso pode ser ainda mais simplificado como:

if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
    echo "failed"
else
    exit
fi
    
por heemayl 11.06.2015 / 13:49