aninhado se as instruções no script de shell

0

Minhas desculpas se meu problema já foi perguntado em outros posts, mas não consegui encontrar nenhum. Estou escrevendo um pequeno script de shell que requer que eu escreva uma instrução if aninhada. Eu não tenho certeza se estou fazendo certo. Não recebo erros, mas o programa não está funcionando como eu esperava. O que eu quero é: se o arquivo já estiver em MasterFile.txt , o usuário terá a opção de pegar outro conjunto de dados dizendo y ou Y ou digamos n ou N para finalizar programa. Problema: o script não termina . Se o arquivo não existir em MasterFile.txt , leve 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 '5')
      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 '5')
sleep 8s
screen -S trans -X quit
}
fi
    
por Ptheguy 01.06.2017 / 18:35

1 resposta

1

Uma rápida reescrita com uma 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 '5')
      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 '5')
    sleep 8s
    screen -S trans -X quit
fi

Você não parece ter nenhuma função declarada aqui, então return não é válido para este caso de uso. Presumi que uma resposta não afirmativa à sua pergunta solicitada deveria 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 maiúscula, o que simplifica a verificação de resposta.

    
por 01.06.2017 / 19:14