我在tldp.com上读到了
if [$ condition1]&& [$ condition2]
相同:if [$ condition1 -a $ condition2]
如果condition1和condition2都为true,则返回true ...“
但是当我尝试
时if [ $a == 2 ] || [ $b == 4 ]
then
echo "a or b is correct"
else
echo "a and b are not correct"
fi
它给出了错误。我正在使用bash。
答案 0 :(得分:2)
你的逻辑没问题,但你的比较运算符是不正确的,你应该使用'-eq'来比较整数,'=='用于字符串。请参阅'man test'以获得快速参考,尽管它也记录在'man bash'中。
使用整数比较时,最好将变量初始化为0,否则如果它们未设置,则会出现错误。
正如c00k所提到的,使用[[而不是[如果使用bash,因为它是内置的,所以bash不需要shell出来使用/ usr / bin / [命令。
即
a=0;b=0
# do something else with a or b
if [[ $a -eq 2 ]] || [[ $b -eq 4 ]]
then
echo "a or b is correct"
else
echo "a and b are not correct"
fi
答案 1 :(得分:1)
如果您使用 Bash
,请删除单[
并使用双[[
。
对于算术运算,请使用((
。
所以你想写这个:
if (( a == 2 )) || (( b == 4 )); then
echo "foo"
fi # etc
答案 2 :(得分:0)
您是否为a
和b
分配了值?如果不是,你必须(否则你肯定应该)用双引号引用你的变量:
if [ "$a" == "2" ] || [ "$b" == "4" ]; then
echo "a or b is correct";
else
echo "a and b are not correct";
fi
答案 3 :(得分:-1)
如果我错了,请纠正我。 &安培;&安培;和||是bash比较
#!/usr/bin/ksh
set -x ###### debug mode on
while :
do
dt=`date '+%M'`
if ([ "$dt" -ge "15"] && [ "$dt" -le "17" ]) || ([ "$dt" -ge "25" ] && [ "$dt" -le "27" ])
then
echo "Time-->minutes between 15 to 17 OR 25 to 27"
else
echo "Time--> minutes out of range"
fi
sleep 300 ##### sleep for 5 minutes
done
-------------下面的行是调试输出
+ + date +%M
dt=17
+ [ 17 -ge 15 ]
+ [ 17 -le 17 ]
+ echo Time--> minutes between 15 to 17 OR 25 to 27
Time--> minutes between 15 to 17 OR 25 to 27
+ date
Sat Mar 3 15:17:23 AST 2012
+ sleep 300
>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ :
+ + date +%M
dt=22
+ [ 22 -ge 15 ]
+ [ 22 -le 17 ]
+ [ 22 -ge 25 ]
+ echo Time--> minutes out of range
Time--> minutes out of range
+ sleep 300
^C$ ######## breaking out of loop(terminating the execution).
$
$ env |grep -i shell
+ grep -i shell
+ env
SHELL=/bin/ksh
$ set +x ##### ending debug mode.