
如果我的問題已在其他帖子中提出,我很抱歉,但我找不到任何問題。我正在編寫一個小 shell 腳本,它需要我編寫一個嵌套的 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
(如果是字母)為大寫,這簡化了響應檢查。