Verschachtelte If-Anweisungen im Shell-Skript

Verschachtelte If-Anweisungen im Shell-Skript

Ich entschuldige mich, wenn mein Problem bereits in anderen Beiträgen angesprochen wurde, aber ich konnte keine finden. Ich schreibe ein kleines Shell-Skript, das von mir verlangt, eine verschachtelte if-Anweisung zu schreiben. Ich bin mir nicht sicher, ob ich es richtig mache. Ich bekomme keine Fehler, aber das Programm funktioniert nicht wie erwartet. Was ich will, ist: Wenn die Datei bereits in ist MasterFile.txt, hat der Benutzer die Möglichkeit, entweder einen anderen Datensatz zu nehmen, indem er yoder sagt, oder oder Yzu sagen, um das Programm zu beenden.nNProblem: Skript wird nicht beendet. Wenn die Datei nicht existiert MasterFile.txt, dann nehmen Sie den Datensatz. Hier ist der Code:

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

Antwort1

Eine schnelle Umschreibung mit konventionellerer Syntax:

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

Sie scheinen hier keine Funktionen deklariert zu haben, daher returnist dies für diesen Anwendungsfall nicht gültig. Ich bin davon ausgegangen, dass eine nicht-bejahende Antwort auf Ihre gestellte Frage das gesamte Skript abbrechen soll, daher die Verwendung von exit.

Die Konstruktion ${variable^}erzwingt, dass das erste Zeichen von $variable, sofern es sich um einen Buchstaben handelt, groß geschrieben wird, was die Antwortprüfung vereinfacht.

verwandte Informationen