Вложенные операторы if в скрипте оболочки

Вложенные операторы if в скрипте оболочки

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

Связанный контент