Avaliar Saída de Um Script [RESOLVIDO]

1. Avaliar Saída de Um Script [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 29/12/2016 - 15:12h

Boa tarde pessoal, tudo joia?

É o seguinte, imagine que tenho um script que realiza uma tarefa qualquer e gere um retorno, por exemplo:
pergunta.sh

#!/bin/bash

echo "Seu número favorito é 1?"
read -p "-> " resposta

if [ $resposta = "s" ] || [ $resposta = "S" ]; then
exit 0
else
exit 1
fi

Agora imagine que tenho outro script que o chama:
teste.sh

#!/bin/bash

echo "Chamando outro script"
./pergunta.sh

?
?

if [ $saida -eq 0 ];then
echo "Seu número favorito é 1"
else
echo "Você tem outro número favorito"
fi

Aí está minha dúvida, como faço para saber qual foi a saída do pergunta.sh e/ou atribuí-la à variável $saida?

Desde já muito grato pela ajuda.


  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 30/12/2016 - 02:13h

Sobre saída de scripts:

Há como fazer algumas coisas:

#!/bin/bash

# script teste-01.sh

echo -n 1


#!/bin/bash

# script teste-02.sh

resposta="$(./script-01.sh)"

# e o resultado vai para resposta


ou executar o script/comando e usar exit 0, exit 1, exit 2 ... na última linha.

Esse valor vai em BASH para a variável de ambiente $?, que recebe valores de 0 a 255.

Vale usar o seguinte para avaliação:

resp=$?

if [ $resp -eq 2 ] # por exemplo
then
...
fi


Ou ainda escrever a saída do script com um arquivo temporário geralmente usando algo como arq.tmp.$$ onde $$ é outra variável local BASH e significa o número do processo corrente, que serve para gerar temporários distintos a cada vez que o script é executado.

O temporário pode ser criado localmente ou em /tmp.

Algumas destas coisas imaginei, muitas encontrei por acaso e outras vi em scripts do Morimoto.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


3. Re: Avaliar Saída de Um Script

Iago Lira
iagolira

(usa Debian)

Enviado em 29/12/2016 - 18:58h

Eu poderia te dar a resposta de mão beijada, mas vou te passar dois scripts que criei, aí tu estuda eles que tu conseguirás resolver teu problema:

script1.sh
#!/bin/bash

echo $1


script2.sh
#! /bin/bash

./script1.sh
while read saida
do echo "Saída do script1.sh: $saida"
done


Executa e veja a saída.:
./script2.sh 


Se tiver ajudado marca como resolvido.

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física


4. Re: Avaliar Saída de Um Script

Jeffersson Abreu
ctw6av

(usa Nenhuma)

Enviado em 29/12/2016 - 19:30h

Por que não uma função? Ex:
#!/bin/bash

function pergunta(){
echo "Seu número favorito é 1?"
read -p "-> " resposta

case $resposta in
's'|'S') return 0 ;;
*) return 1 ;;
esac
}

if pergunta; then
echo "Seu número favorito é 1"
else
echo "Você tem outro número favorito"


______________________________________________________________________
OS: Biebian
Kernel: x86_64 3.5.2-amd64
Resolution: 1320x768
CPU: Intel Core i3-4005U CPU @ 1.7GHz
RAM: 3852MiB
Distro: http://biebian.sourceforge.net/


5. Re: Avaliar Saída de Um Script [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 29/12/2016 - 22:41h

ctw6av escreveu:

Por que não uma função? Ex:
#!/bin/bash

function pergunta(){
echo "Seu número favorito é 1?"
read -p "-> " resposta

case $resposta in
's'|'S') return 0 ;;
*) return 1 ;;
esac
}

if pergunta; then
echo "Seu número favorito é 1"
else
echo "Você tem outro número favorito"



Isso que eu passei é apenas um exemplo, porque quero entender como fazer, assim que eu conseguir será implementado em um projeto muito maior, que será divido em "módulos" (scripts). Caso eu faça tudo em um único script ficará difícil dar manutenção com o passar do tempo.


6. Re: Avaliar Saída de Um Script [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 29/12/2016 - 23:09h

passosfil escreveu:

Eu poderia te dar a resposta de mão beijada, mas vou te passar dois scripts que criei, aí tu estuda eles que tu conseguirás resolver teu problema:

script1.sh
#!/bin/bash

echo $1


script2.sh
#! /bin/bash

./script1.sh
while read saida
do echo "Saída do script1.sh: $saida"
done


Executa e veja a saída.:
./script2.sh 



Olá, desculpe a ignorância, mas o que exatamente esses scripts fazem? Executei o script2.sh e a única coisa que fez foi pular uma linha e ficar pedindo para eu digitar alguma coisa, depois exibia aquilo que eu havia digitado. Além de encerrar apenas depois de pressionar Ctrl+C.


7. Re: Avaliar Saída de Um Script [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/12/2016 - 23:16h

if [ $resposta = "s" ] || [ $resposta = "S" ]; then 


Um problema com o código é esse || porque ele não funciona exatamente como conector "OU".
Ele é um encadeador de comando de shell para comandos que falham.

O melhor é usar o conector correto para o teste:

if [ $resposta = "s" -o $resposta = "S" ]; then 


Use -a quando quiser conector AND.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



8. Re: Avaliar Saída de Um Script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/12/2016 - 23:17h

adrisiq escreveu:

Boa tarde pessoal, tudo joia?

É o seguinte, imagine que tenho um script que realiza uma tarefa qualquer e gere um retorno, por exemplo:
pergunta.sh

#!/bin/bash

echo "Seu número favorito é 1?"
read -p "-> " resposta

if [ $resposta = "s" ] || [ $resposta = "S" ]; then
exit 0
else
exit 1
fi

Agora imagine que tenho outro script que o chama:
teste.sh

#!/bin/bash

echo "Chamando outro script"
./pergunta.sh

?
?

if [ $saida -eq 0 ];then
echo "Seu número favorito é 1"
else
echo "Você tem outro número favorito"
fi

Aí está minha dúvida, como faço para saber qual foi a saída do pergunta.sh e/ou atribuí-la à variável $saida?

Desde já muito grato pela ajuda.


-----------------------------------------------------
Boa noite adrisiq.
Segue sugestão, bem simples e objetiva....
#!/bin/bash
echo "Seu número favorito é 1?"
read -p "-> " -n1 resp
[[ $resp == +(S|s) ]] && echo -e "\nSeu número favorito é 1" || echo -e "\nVocê tem outro nº favorito


Att.:
Marcelo Oliver


9. Re: Avaliar Saída de Um Script [RESOLVIDO]

Iago Lira
iagolira

(usa Debian)

Enviado em 30/12/2016 - 00:13h

adrisiq escreveu:

passosfil escreveu:

Eu poderia te dar a resposta de mão beijada, mas vou te passar dois scripts que criei, aí tu estuda eles que tu conseguirás resolver teu problema:

script1.sh
#!/bin/bash

echo $1


script2.sh
#! /bin/bash

./script1.sh
while read saida
do echo "Saída do script1.sh: $saida"
done


Executa e veja a saída.:
./script2.sh 



Olá, desculpe a ignorância, mas o que exatamente esses scripts fazem? Executei o script2.sh e a única coisa que fez foi pular uma linha e ficar pedindo para eu digitar alguma coisa, depois exibia aquilo que eu havia digitado. Além de encerrar apenas depois de pressionar Ctrl+C.


Só dei um exemplo, agora você tem que entender o mecanismo e adaptar a sua necessidade.

Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física


10. Re: Avaliar Saída de Um Script [RESOLVIDO]

Adriano Siqueira
adrisiq

(usa KDE Neon)

Enviado em 30/12/2016 - 09:04h

Bom dia pessoal, tudo bem?
Consegui resolver da seguinte maneira:
teste.sh

#!/bin/bash
sudo apt-get update > /dev/null
exit $!

teste2.sh

#!/bin/bash
clear
./teste.sh
saida=$?
if [ $saida -eq 0 ]; then
echo "Tudo certo"
else
echo "Algo deu errado"
fi

fonte: http://www.tldp.org/LDP/abs/html/exit-status.html
Não tinha visto esse post antes, que furada...

Muito obrigado a todos pela ajuda e paciência.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts