Captura do último valor retornado no Unix

0

por favor me ajude com isso.

Estou fazendo um arquivo de teste grep.txt e quero pegar o valor inteiro e imprimi-lo. Estou fazendo isso,

grep test file.txt
if [ "$?" -eq 0]
then
echo success
else
echo fail
fi

Neste código, se o grep retorna um valor ou não sempre, o código de saída é 0, pois o comando é bem sucedido.

Eu não quero fazer o seguinte, pois o meu código atual tem greps repetitivos, digamos 10 vezes e não está funcionando.

a='grep test file.txt'
if [ "$a" -eq "" ]
then
echo fail
else
echo success
fi

Estou procurando uma solução simples como essa,

echo $ (anything) deve pegar o valor. Por favor, derramar alguma luz - realmente urgente.

    
por ramesh 04.02.2016 / 18:28

4 respostas

4

Seus resultados não correspondem ao meu

echo 'some test here' > file.txt
grep test file.txt
echo $?    # returns 0

echo 'something else here' > file.txt
grep test file.txt
echo $?    # returns 1

Além disso, quando executo seu próprio exemplo de código completo, obtenho o "sucesso" ou "falha" de acordo com a existência ou não da palavra-chave no arquivo. (Eu adicionei o espaço faltante entre o 0 e ] porque senão você estaria recebendo o erro, -bash: [: missing ']' e você não reportou isso.)

grep test file.txt
if [ "$?" -eq 0 ]
then
    echo success
else
    echo fail
fi

No entanto, como sugestão de estilo, eu testaria o comando grep diretamente, como este

if grep test file.txt
then
    echo success
else
    echo fail
fi

Parece-me que você pode querer usar o valor de retorno do grep após seu bloco if ... fi . Nesse caso, basta salvar o valor e continuar em:

grep test file.txt
ss=$?
if [ 0 -eq $ss ]
then
    echo success
else
    echo fail
fi
# Here $ss still contains the return value from grep
    
por 04.02.2016 / 19:20
1

Seu código original deve funcionar como esperado se você adicionar um space entre o 0 e o ] .

grep test file.txt
if [ "$?" -eq 0 ]
then
echo success
else
echo fail
fi
    
por 04.02.2016 / 19:17
0
grep test file.txt
if [ "$?" -eq 0]
then
  echo success
  exitcode=0
else
  echo fail
  exitcode=1 
fi
exit ${exitcode}

Não sei ao certo o que você está procurando, mas se quiser que seu script saia com o mesmo código que o seu comando grep , isso funcionará para você.

Se você estiver procurando por algo mais, tente se explicar melhor.

    
por 04.02.2016 / 18:41
0

Pode percorrer o awk em vez de confiar no código de retorno.

grep posix test_file.txt|awk 'BEGIN{matches=0}{matches++}END{if(matches>0){print "success";}else{print "fail";}}'

Imprimir apenas a primeira correspondência:

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=$0;}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'

E com o recurso de captura de valor em que todas as correspondências grep são mostradas:

grep testvalue test_file.txt|awk 'BEGIN{matches="";}{matches=matches $0 "\n";}END{if(matches!=""){print "success";print matches;}else{print "fail";}}'
    
por 04.02.2016 / 18:49