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(如果是字母)為大寫,這簡化了響應檢查。

相關內容