Bash 在IF中的重击或状态

Bash 在IF中的重击或状态,bash,if-statement,Bash,If Statement,为什么OR条件在下面的bash脚本中不起作用 read number if [ "$number" != 1 -o "$number" != 2 ] ; then echo not 1 or 2 fi if [ "$number" == 1 -o "$number" == 2] ; then echo 1 or 2 fi exit 我试过这个,效果很好: #!/bin/bash read number if [ "$number" != 1 -o "$number" != 2 ]

为什么OR条件在下面的bash脚本中不起作用

read number
if [ "$number" != 1 -o "$number" != 2 ] ; then  echo not 1 or 2   fi
if [ "$number" == 1 -o "$number" == 2] ; then   echo 1 or 2  fi 
exit

我试过这个,效果很好:

#!/bin/bash
read number
if [ "$number" != 1 -o "$number" != 2 ];then
    echo not 1 or 2
fi
if [ "$number" == 1 -o "$number" == 2 ];then
    echo 1 or 2
fi
exit
输出:

[~]$./test1.sh 
2
not 1 or 2
1 or 2
[~]$./test1.sh 
1
1 or 2
[~]$./test1.sh 
2
1 or 2
[~]$./test1.sh 
3
not 1 or 2
[~]$./test1.sh 
4
not 1 or 2
无论如何,根据正确的语法和您的第一条输出消息,您应该使用:

#!/bin/bash
read number
if [ "$number" -ne 1 ] && [ "$number" -ne 2 ];then
     echo not 1 or 2
fi
if [ "$number" -eq 1 ] || [ "$number" -eq 2 ];then
    echo 1 or 2
fi
exit
输出:

[~]$./test1.sh 
2
not 1 or 2
1 or 2
[~]$./test1.sh 
1
1 or 2
[~]$./test1.sh 
2
1 or 2
[~]$./test1.sh 
3
not 1 or 2
[~]$./test1.sh 
4
not 1 or 2
致意
克劳迪奥

第一个不应该是
[“$number”!=1-一个“$number”!=2]
?你应该总是指定它不起作用的方式。你期望得到什么样的结果,你实际得到什么样的结果,这是为了什么输入?谢谢,很抱歉浪费了你的时间,我应该用-a而不是-o。我得到的输出是“不是1或2”,不管数字的值是多少。您不应该使用
-o
-a
;使用
[…]|[…]
表示或,
[…]&&[…]
表示和。如果您不需要POSIX兼容性,请使用
[[…| |[…]]
[…&&&-]
而不是
[…]
。您也不应该将
=
[
一起使用;POSIX不支持
=
操作符(使用
=
),如果它确实有效,则很可能意味着您可以使用支持
=
[