
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 y
o Y
, o decir n
o N
finalizar 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 return
no 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.