linux脚本多个条件比较大小,如何在shell if语句中表示多个条件?
經(jīng)典技術(shù)(轉(zhuǎn)義元字符):
if [ \( "$g" -eq 1 -a "$c" = "123" \) -o \( "$g" -eq 2 -a "$c" = "456" \) ]
then echo abc
else echo efg
fi
我已經(jīng)$g用雙引號將引用括起來;一般來說,這是一個(gè)好習(xí)慣。嚴(yán)格來說,并不需要括號,因?yàn)榈膬?yōu)先級-a,并-o使得它糾正,甚至沒有他們。
請注意,-aand -o運(yùn)算符是testaka 的POSIX規(guī)范的一部分[,主要是為了向后兼容(例如,因?yàn)樗鼈兪莟est7th Edition UNIX 的一部分),但是POSIX將它們明確標(biāo)記為“過時(shí)”。Bash(請參閱條件表達(dá)式)似乎搶先了經(jīng)典和POSIX的含義,-a并-o帶有自己的接受參數(shù)的替代運(yùn)算符。
一定要小心,您可以使用更現(xiàn)代的[[運(yùn)算符,但是請注意,例如Bash和Korn Shell中的版本不必相同。
for g in 1 2 3
do
for c in 123 456 789
do
if [[ ( "$g" -eq 1 && "$c" = "123" ) || ( "$g" -eq 2 && "$c" = "456" ) ]]
then echo "g = $g; c = $c; true"
else echo "g = $g; c = $c; false"
fi
done
done
在Mac OS X上使用Bash 3.2.57運(yùn)行示例:
g = 1; c = 123; true
g = 1; c = 456; false
g = 1; c = 789; false
g = 2; c = 123; false
g = 2; c = 456; true
g = 2; c = 789; false
g = 3; c = 123; false
g = 3; c = 456; false
g = 3; c = 789; false
您不需要像使用引號一樣引用變量[[,[因?yàn)樗皇且韵嗤姆绞絒是單獨(dú)的命令。
這不是一個(gè)經(jīng)典的問題嗎?
我會這么想的。但是,還有另一種選擇,即:
if [ "$g" -eq 1 -a "$c" = "123" ] || [ "$g" -eq 2 -a "$c" = "456" ]
then echo abc
else echo efg
fi
的確,如果您閱讀了該autoconf工具或相關(guān)軟件包的“便攜式外殼”指南,則建議使用“ ||”和“ &&” 這種符號。我想您甚至可以做到:
if [ "$g" -eq 1 ] && [ "$c" = "123" ]
then echo abc
elif [ "$g" -eq 2 ] && [ "$c" = "456" ]
then echo abc
else echo efg
fi
在動(dòng)作像回聲一樣瑣碎的情況下,這還不錯(cuò)。當(dāng)要重復(fù)的動(dòng)作塊為多行時(shí),重復(fù)會很痛苦,并且較早的版本之一是可取的-否則您需要將動(dòng)作包裝到在不同then塊中調(diào)用的函數(shù)中。
總結(jié)
以上是生活随笔為你收集整理的linux脚本多个条件比较大小,如何在shell if语句中表示多个条件?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核关闭触摸屏校准,linux
- 下一篇: linux用8m内存读取1g日志,检查