
Приношу извинения, если мой вопрос уже задавался в других сообщениях, но я не смог их найти. Я пишу небольшой скрипт оболочки, который требует от меня написать вложенный оператор 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
решение1
Быстрая переработка с более традиционным синтаксисом:
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
, если это буква, быть заглавным, что упрощает проверку ответа.