2015-08-27 2 views
1

Почему условие ИЛИ не работает в следующем сценарии bash?Баш или условие в IF

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 
+4

Если не первый один быть '[ "$ число"! = 1 -a "$ число"! = 2]'? – user000001

+3

Вы всегда должны указывать *, каким образом * он не работает. Какой результат вы ожидаете, какой результат вы получаете, и для чего это происходит? –

+0

Спасибо, и извините за потраченное время, я должен был использовать -a вместо -o. Я получал вывод «не 1 или 2» независимо от того, какое значение имеет номер. – Darknifem

ответ

1

Я попробовал это, и это работает:

#!/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 

в любом случае в соответствии с правом синтаксиса и первого выходного сообщения вы должны использовать это:

#!/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 
1 
1 or 2 
[~]$./test1.sh 
2 
1 or 2 
[~]$./test1.sh 
3 
not 1 or 2 
[~]$./test1.sh 
4 
not 1 or 2 

С наилучшими пожеланиями Клаудио