Shell編程——條件判斷

1.按照文件類型進行判斷

測試選項 作用
-b 文件 判斷該文件是否存在,並且是否爲塊設備文件(是塊設備文件爲真)
-c 文件 判斷該文件是否存在,並且是否爲字符設備文件(是字符設備文件爲真)
-d 文件 判斷該文件是否存在,並且是否爲目錄文件
-e 文件 判斷該文件是否存在(存在爲真)
-f 文件 判斷該文件是否存在,並且是否爲普通文件(是普通文件爲真)
-L 文件 判斷該文件是否存在,並且是否爲符號鏈接文件(是符號鏈接文件爲真)
-p 文件 判斷該文件是否存在,並且是否爲管道文件
-s 文件 判斷該文件是否存在,並且是否爲非空
-S 文件 判斷該文件是否存在,並且是否爲套接字文件(是套接字文件爲真)

兩種判斷格式:

[cfp@bogon ~]$ test -e /root/install.log
[cfp@bogon ~]$ [ -e /root/install.log ] #這種形式比較常見

實例:

[cfp@bogon ~]$ test -e ./text/a.txt
[cfp@bogon ~]$ echo $?
0  #上一條命令返回值是正確的,說明文件存在
[cfp@bogon ~]$ [ -e ./text/a.txt ]   #另一種形式
[cfp@bogon ~]$ echo $?
0  
[cfp@bogon ~]$ test -e ./text/a.txu
[cfp@bogon ~]$ echo $?
1  #上一條命令返回值是錯誤的,說明文件不存在

[cfp@bogon ~]$ [ -e ./text/a.txt ] && echo yes || echo no
yes
# 第一個判斷命令如果正確執行,則打印“ yes ”,否則打 印“ no ”  
#這樣寫的好處是可以直接判斷命令的對錯,不用再用“echo $?”來看命令是否正確。

2.按照文件權限進行判斷

測試選項 作用
-r 文件 判斷該文件是否存在,並且是否該文件擁有讀權限(有讀權限爲真)
-w 文件 判斷該文件是否存在,並且是否該文件擁有寫權限(有寫權限爲真)
-x文件 判斷該文件是否存在,並且是否該文件擁有執行權限(有執行權限爲真)
-u 文件 判斷該文件是否存在,並且是否該文件擁有SUID權限(有 SUID權限爲真)
-g文件 判斷該文件是否存在,並且是否該文件擁有SGID權限(有 SGID權限爲真)
-k文件 判斷該文件是否存在,並且是否該文件擁有SBit權限(有 SBit權限爲真)
[cfp@bogon ~]$ [ -w ./text/a.txt ] && echo yes || echo no
yes    
#判斷文件是否有寫的權限

3.兩個文件之間進行比較

測試選項 作用
文件1 -nt 文件2 判斷文件1的修改時間是否比文件2的新(如果新則爲真)
文件1 -ot 文件2 判斷文件1的修改時間是否比文件2的舊
文件1 -ef 文件2 判斷文件1是否和文件2的Inode號一致,可以理解爲兩個 文件是否爲同一個文件。這個判斷用於判斷硬鏈接是很好的方法
[cfp@bogon ~]$ ln ./text/a.txt ./text/c.txt   
#建立硬鏈接,硬鏈接的文件,文件的Inode號是一樣的
[cfp@bogon ~]$ [ ./text/a.txt -ef ./text/c.txt ] && echo yes || echo no
yes

4.兩個整數之間的比較

測試選項 作用
整數1 -eq 整數 2 判斷整數1是否和整數2相等(相等爲真)
整數1 -ne 整數 2 判斷整數1是否和整數2不相等(不相等爲真)
整數1 -gt 整數 2 判斷整數1是否大於整數2(大於爲真)
整數1 -lt 整數 2 判斷整數1是否小於整數2(小於位置)
整數1 -ge 整數 2 判斷整數1是否大於等於整數2(大於等於爲真)
整數1 -le 整數 2 判斷整數1是否小於等於整數2(小於等於爲真)
[cfp@bogon ~]$ [ 22 -ge 22 ] && echo yes ||echo no
yes
# 判斷 22 是否大於等於 22 ,當然是了
 
[cfp@bogon ~]$ [ 23 -le 22 ] && echo yes || echo no
no
# 判斷 23 是否小於等於 22 ,當然不是了

5.字符串的判斷

測試選項 作用
-z 字符串 判斷字符串是否爲空(爲空返回真)
-n 字符串 判斷字符串是否爲非空(非空返回真)
字符串1==字符串2 判斷字符串1是否和字符串2相等(相等返回真)
字符串1!=字符串2 判斷字符串1是否和字符串2不相等(不相等返回真)
[cfp@bogon ~]$ name=sc
[cfp@bogon ~]$ [ -z "$name" ] && echo yes || echo no
no
# 判斷 name 變量是否爲空,因爲不爲空,所以返回 no 
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
# 給變量 aa 和變量 bb 賦值
[cfp@bogon ~]$ [ "$aa" == "bb" ] && echo yes || echo no
no
# 判斷兩個變量的值是否相等,明顯不相等 ,所以返回no

6.多重條件判斷

測試選項 作用
判斷1 -a 判斷2 邏輯與,判斷1和判斷2都成立,最終的結果才爲真
判斷1 -o 判斷2 邏輯或,判斷1和判斷2有一個成立,最終的結果就爲真
!判斷 邏輯非,使原始的判斷式取反
[cfp@bogon ~]$ aa=21
[cfp@bogon ~]$ [ -n "$aa" -a $aa -gt 23 ] && echo yes || echo no
# 判斷變量 aa 是否有值,同時判斷變量 aa 的是否大於 23 
no
# 因爲變量 aa 的值不大於 23 ,所以雖然第一個判斷值爲真, 返回的結果也是假
[cfp@bogon ~]$ aa=24
[cfp@bogon ~]$ [ -n "$aa" -a $aa -gt 23 ] && echo yes || echo no
yes
[cfp@bogon ~]$ aa=""   
#字符串aa爲空
[cfp@bogon ~]$ [ -n "$aa" -a 24 -gt 21 ] && echo yes || echo no
no
# 因爲變量aa的值爲空 ,所以雖然第二個判斷值爲真, 返回的結果也是假

7. 總結

  文章總結了幾種常見的條件判斷。如果你有編程語言基礎的話,這些應該是很簡單的。如果沒有編程基礎,也不會太難,就是幾種常見的格式,熟悉了就可以。
     在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章