if中的两个条件

时间:2012-07-06 21:58:49

标签: bash if-statement conditional-statements

我正在尝试编写一个脚本,它将读取两个选项,如果它们都是“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”回答这两个问题时,它说的是“测试完成!”我做错了什么?

8 个答案:

答案 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”