如果我的问题已在其他帖子中提出,我很抱歉,但我找不到任何问题。我正在编写一个小 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
(如果是字母)为大写,这简化了响应检查。