
Peço desculpas se meu problema já foi perguntado em outras postagens, mas não consegui encontrar nenhum. Estou escrevendo um pequeno script de shell que exige que eu escreva uma instrução if aninhada. Não tenho certeza se estou fazendo certo. Não recebo erros, mas o programa não está funcionando como esperado. O que eu quero é: se o arquivo já estiver em MasterFile.txt
, o usuário terá a opção de obter outro conjunto de dados dizendo y
ou Y
, ou dizer n
ou N
encerrar o programa.Problema: o script não termina. Se o arquivo não existir MasterFile.txt
, pegue o conjunto de dados. Aqui está o código:
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt;
then {
echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
read string3
if "${string3}" = 'Y' || "${string3}" = 'y'; then {
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
}
else{return}
fi
else{
#opening screen & begin analysis
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
}
fi
Responder1
Uma reescrita rápida com sintaxe mais convencional:
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
echo "dicounter_${string1}_from_${string2} already exists in the MasterFile. Would you like to proceed?"
read string3
if [[ "${string3^}" == 'Y' ]]; then
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
else
exit 0
fi
else
#opening screen & begin analysis
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
fi
Parece que você não tem nenhuma função declarada aqui, portanto return
não é válido para este caso de uso. Presumi que uma resposta não afirmativa à sua pergunta visa abortar todo o script, daí o uso de exit
.
A construção ${variable^}
forçará o primeiro caractere de $variable
, se for uma letra, a ser maiúsculo, o que simplifica a verificação da resposta.