我正在尝试编写一个脚本,它将读取两个选项,如果它们都是“y”,我希望它说“Test Done!”如果他们中的一个或两个不是“y”我想让它说“测试失败!” 这就是我想出的:
echo "- Do You want to make a choice ?"
read choice
echo "- Do You want to make a choice1 ?"
read choice1
if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
但是当我用“y”回答这两个问题时,它说“测试失败了!”而不是“测试完成!”。当我用“n”回答这两个问题时,它说的是“测试完成!”我做错了什么?
答案 0 :(得分:34)
您正在检查错误的情况。
if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ];
以上陈述适用于choice!='y'
和choice1!='y'
,因此程序正确打印“Test Done!”。
更正的脚本是
echo "- Do You want to make a choice ?"
read choice
echo "- Do You want to make a choice1 ?"
read choice1
if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
答案 1 :(得分:3)
该程序完全按照您的要求执行操作。你说“如果第一个选择不等于'y'而第二个选择不等于'y'那么打印”Test Done!“否则打印”Test Failed!“ - 所以只有两个选择都是 y将打印“Test Done!”。
你可能意味着:
echo "- Do You want to make a choice ?"
read choice
echo "- Do You want to make a choice1 ?"
read choice1
if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
我将!=
更改为等于==
等于。现在,只有你回答“y”两个问题才会“完成测试!”打印。
答案 2 :(得分:1)
if [ "$choice" != 'y' -a "$choice1" != 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
答案 3 :(得分:1)
你得到了比较逻辑;根据您的描述,您想说
if [ "$choice" = 'y' ] && [ "$choice1" = 'y' ]; then
我真的很惊讶&&建造工程,虽然进一步检查它可能应该。不过,我会把它写成
if [ "$choice" = 'y' -a "$choice1" = 'y' ]; then
答案 4 :(得分:1)
你的逻辑逆转了;你正在检查!=当你应该检查==。试试这个:
if [ "$choice" == 'y' ] && [ "$choice1" == 'y' ]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
答案 5 :(得分:1)
另一个想法,
$ c1='y' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false
true
$ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] && [[ ${c2} = 'y' ]] && echo true || echo false
false
$ c1='n' ; c2='y' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false
true
$ c1='n' ; c2='n' ; [[ ${c1} = 'y' ]] || [[ ${c2} = 'y' ]] && echo true || echo false
false
$
胡言乱语的溢出。 (;
答案 6 :(得分:0)
如果您尝试了
,该怎么办?if [[ "$choice" != 'y' && "$choice1" != 'y' ]]; then
echo "Test Done !"
else
echo "Test Failed !"
fi
答案 7 :(得分:0)
这一行
if [ "$choice" != 'y' ] && [ "$choice1" != 'y' ]; then
测试两个选项是否都不是'my',所以当两个选项都'y'时,语句为false并且你的程序正确打印“Test Failed”