Вложенные операторы 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
0
01.06.2017, 19:35
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, если это буква, быть прописной, что упрощает проверку ответа.

3
28.01.2020, 02:33

Теги

Похожие вопросы