Skip to content

[bash]关于if语句中的逻辑运算

六月 6, 2013

最近有友人问我,bash中的if语句怎样加入多个条件判断(boolean expression)的运算,比如使用”与”(and)或者“或”(or)连接的逻辑运算,类似于C中的语句:

if  ( prime == 9973 || prime == 10007 )

实际上有很长时间我自己都一直认为bash的if语句中只能有单个的条件判断,所以我以前都是这样做的……

if [ $prime -eq 9973 ]; then
echo $prime
elif [ $prime -eq 10007 ]; then
echo $prime
fi
实际上if语句中是可以加入逻辑运算的……只是因为bash在这一方面的语法一点也不直观化,所以我猜很多想当然的童鞋都和我一样试了几次就放弃了,比如:

if [ $prime -eq 9973  || $prime -eq 10007  ]  # 采用c的方式……不行

或者

if [ [ $prime -eq 9973 ] -o [ $prime -eq 10007 ] ]  # 这个很直观,但是不行

或者

if [ [ $prime -eq 9973 ]  || [ $prime -eq 10007 ] ]  # 这个也不行

想要加入逻辑运算的话,实际上需要这样(!):

if  [ $prime -eq 9973  -o  $prime -eq 10007 ]

出乎意料的简单……但如果有很多逻辑项的话,估计看起来很累,
另外一个不那么考验运算符优先级判断的方法是:

if  [[ $prime -eq 9973  ||  $prime -eq 10007 ]]

即加入双重括号……这大概会让程序(稍微的)变得好读些
BTW,似乎想要在bash中启用逻辑与或非运算符号(&&,||,!)必须要使用双重括号。

Advertisements
No comments yet

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: