Приношу свои извинения, если моя проблема уже задавалась в других сообщениях, но мне не удалось их найти. Я пишу небольшой сценарий оболочки, который требует, чтобы я написал вложенный оператор if. Я не совсем уверен, что делаю это правильно. Я не получаю ошибок, но программа работает не так, как я ожидал. Я хочу: если файл уже находится в MasterFile.txt
, то у пользователя есть возможность взять другой набор данных, сказав y
или Y
], или скажите n
или N
, чтобы завершить программу. Проблема: скрипт не завершается . Если файл не существует в MasterFile.txt
, возьмите набор данных. Вот код:
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
Быстрое переписывание с более традиционным синтаксисом:
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
Кажется, здесь не объявлены никакие функции, поэтому return
недействителен для этого варианта использования. Я предположил, что неутвердительный ответ на заданный вами вопрос предназначен для прерывания всего сценария, отсюда и использование exit
.
Конструкция ${variable^}
заставит первый символ $variable
, если это буква, быть прописной, что упрощает проверку ответа.