Declaraciones If anidadas en Shell Script

Declaraciones If anidadas en Shell Script

Mis disculpas si mi problema ya se ha planteado en otras publicaciones, pero no pude encontrar ninguna. Estoy escribiendo un pequeño script de shell que requiere que escriba una declaración if anidada. No estoy realmente seguro de estar haciéndolo bien. No recibo ningún error, pero el programa no funciona como esperaba. Lo que quiero es: si el archivo ya está en MasterFile.txt, entonces el usuario tiene la opción de tomar otro conjunto de datos diciendo yo Y, o decir no Nfinalizar el programa.Problema: el script no termina. Si el archivo no existe en MasterFile.txt, tome el conjunto de datos. Aquí está el 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

Respuesta1

Una reescritura rápida con una sintaxis más 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 no tiene ninguna función declarada aquí, por lo que returnno es válida para este caso de uso. He dado por hecho que una respuesta no afirmativa a la pregunta que me plantea tiene como objetivo abortar todo el script, de ahí el uso de exit.

La construcción ${variable^}forzará que el primer carácter de $variable, si es una letra, esté en mayúsculas, lo que simplifica la verificación de la respuesta.

información relacionada