Instruções If aninhadas em Shell Script

Instruções If aninhadas em Shell Script

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 you Y, ou dizer nou Nencerrar 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 returnnã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.

informação relacionada