【小蝸牛五二無聊之作】
網絡上能找到的相關資料太多了,也太繁雜,但有些人還整理得不錯,下面根據自己的偏好再梳理一下,有些是自己對照着man手冊翻譯的,下面的例子都是自己編造自己測試OK,都是比較實用的東西,友善自己日後參考。
1、算術運算比較運算符(bash自身不能比較浮點數)
-eq 等于 [ $num1 -eq $num2 ]
-ne 不等于 [ 100 -ne $num1 ]
-lt 小于 [ 100 -lt `expr $num1 + $num2` ]
-le 小于或等于 [ 100 -le `expr $num1 \* $num2` ]
-gt 大于 [ 100 -gt `expr $num1 / $num2` ]
-ge 大于或等于 [ 100 -ge `expr $num1 % $num2` ]
2、字元串比較運算符
-z string 如果 string 長度為零,則為真 [ -z "`ps aux | grep mysql`" ]
-n string 如果 string 長度非零,則為真 [ -n "$string" ]
【注意】 $string 一定要放在雙引号裡面 "$string",否則使用 -n -z 的結果都為真!
string1 != string2 如果 string1 與 string2 不同,則為真 [ "$str1" != "Snail" ]
string1 == string2 如果 string1 與 string2 相同,則為真 [ "$str1" == "$str2" ]
(上面用一個 = 也可以,在嚴格的 POSIX 相容下使用)
string1 < string2 如果 string1 按字典順序比較小于 string2,則為真
string1 > string2 如果 string1 按字典順序比較大于 string2,則為真
3、檔案比較運算符
-a filename 如果 filename 存在,則為真 [ -e $HOME/.bashrc ]
-e filename (同上)
-b filename 如果 filename 存在,并且是塊檔案,則為真 [ -e /dev/loop0 ]
-c filename 如果 filename 存在,并且是字元檔案,則為真 [ -e /dev/ttyS0 ]
-d filename 如果 filename 存在,并且為目錄,則為真 [ -d /home/snail ]
-f filename 如果 filename 存在,并且為正常檔案,則為真 [ -f /dev/ttyS0 ]
-g filename 如果 filename 存在,并且為set-group-id,為真 [ -f $HOME/ak47 ]
-h filename 如果 filename 存在,并且為符号連接配接,則為真 [ -h /bin/vi ]
-L filename (同上)
-k filename 如果 filename 存在,并且設定了sticky位,為真 [ -k /bin/ping ]
-p filename 如果 filename 存在,并且為有名管道(FIFO),真 [ -p /tmp/pipe ]
-r filename 如果 filename 存在,并且可讀,則為真 [ -r /etc/passwd ]
-s filename 如果 filename 存在,并且大小不為零,為真 [ -s ./none-zero ]
-u filename 如果 filename 存在,并且為set-user-id,為真 [ -f $HOME/ak47 ]
-w filename 如果 filename 存在,并且可寫,則為真 [ -w /var/log/mail ]
-x filename 如果 filename 存在,并且可執行,則為真 [ -x ./start.sh ]
下面這些不常用的:
-t fd 如果檔案描述符被打開并指向一個終端,則為真 [ -t /proc/1/fd/10 ]
【提示】在 /proc/程序号/fd 下可以找到檔案描述符:)
-O filename 如果 filename 存在,并且被有效使用者ID所擁有,則為真
-G filename 如果 filename 存在,并且被有效組ID所擁有,則為真
-S filename 如果 filename 存在,并且為一個socket,則為真 [ -S /tmp/mysql.sock ]
-N filename 如果 filename 存在,并且在上次讀取後被修改過,則為真
-o optname 如果 shell 選項 optname 被開啟,則為真
【提示】使用 set -o 來檢視
file1 -nt file2 如果 file1 比 file2 新,或者 file1 存在 file2 不存在,則為真
file1 -ot file2 如果 file1 比 file2 舊,或者 file2 存在 file1 不存在,則為真
file1 -ef file2 如果 file1 和 file2 都指向同樣的裝置(device)和索引節點号(inode numbers),則為真
【提示】檢視檔案的索引節點可以用 ls -i 選項
------------------------------------------------------------------------------------------
趙小蝸牛
QQ: 755721501
E-mail: [email][email protected][/email]
在不斷奉獻中謀求生存發展、打造自己的優秀品質,用人性最本質最動人的一面“營銷”自己!