Shell 脚本中的嵌套 If 语句

Shell 脚本中的嵌套 If 语句

如果我的问题已在其他帖子中提出,我很抱歉,但我找不到任何问题。我正在编写一个小 shell 脚本,它需要我编写一个嵌套的 if 语句。我不太确定我做的是否正确。我没有收到任何错误,但程序没有按我的预期运行。我想要的是:如果文件已经在 中MasterFile.txt,那么用户可以选择通过说y或来获取另一组数据Y,或者说nN来终止程序。问题:脚本不终止。如果文件不存在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(如果是字母)为大写,这简化了响应检查。

相关内容