BASH 比較運算小結

【小蝸牛五二無聊之做
 
    網絡上能找到的相關資料太多了,也太繁雜,但有些人還整理得不錯,下面根據本身的偏好再梳理一下,有些是本身對照着man手冊翻譯的,下面的例子都是本身編造本身測試OK,都是比較實用的東西,方便本身往後參考。
 
一、算術運算比較運算符(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` ]
 
二、字符串比較運算符  
 
-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,則爲真
 
三、文件比較運算符 
 
-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
在不斷奉獻中謀求生存發展、打造本身的優秀品質,用人性最本質最動人的一面「營銷」本身!
相關文章
相關標籤/搜索