
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 y
oder sagt, oder oder Y
zu sagen, um das Programm zu beenden.n
N
Problem: 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 return
ist 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.