您好,登錄后才能下訂單哦!
這篇文章為大家帶來有關Shell腳本中條件判斷語句的語法結構和用法詳細介紹。大部分命令和知識點都是大家經常用到的,為此分享給大家做個參考。一起跟隨小編過來看看吧。
思考:何為真(true)?何為假(false)?
##1. 條件判斷語法格式
特別說明:
1)[ 親親,我兩邊都有空格,不空打死你呦 ] :imp:
2)[[ 親親,我兩邊都有空格,不空打死你呦 ]]:imp:
3) 更多判斷,`man test`去查看,很多的參數都用來進行條件判斷
判斷參數 | 含義 |
---|---|
-e | 判斷文件是否存在(任何類型文件) |
-f | 判斷文件是否存在并且是一個普通文件 |
-d | 判斷文件是否存在并且是一個目錄 |
-L | 判斷文件是否存在并且是一個軟連接文件 |
-b | 判斷文件是否存在并且是一個塊設備文件 |
-S | 判斷文件是否存在并且是一個套接字文件 |
-c | 判斷文件是否存在并且是一個字符設備文件 |
-p | 判斷文件是否存在并且是一個命名管道文件 |
-s | 判斷文件是否存在并且是一個非空文件(有內容) |
舉例說明:
test -e file 只要文件存在條件為真
[ -d /shell01/dir1 ] 判斷目錄是否存在,存在條件為真
[ ! -d /shell01/dir1 ] 判斷目錄是否存在,不存在條件為真
[[ -f /shell01/1.sh ]] 判斷文件是否存在,并且是一個普通的文件
判斷參數 | 含義 |
---|---|
-r | 當前用戶對其是否可讀 |
-w | 當前用戶對其是否可寫 |
-x | 當前用戶對其是否可執行 |
-u | 是否有suid,高級權限冒險位 |
-g | 是否sgid,高級權限強制位 |
-k | 是否有t位,高級權限粘滯位 |
說明:這里的新舊指的是文件的修改時間。
判斷參數 | 含義 |
---|---|
file1 -nt file2 | 比較file1是否比file2新 |
file1 -ot file2 | 比較file1是否比file2舊 |
file1 -ef file2 | 比較是否為同一個文件,或者用于判斷硬連接,是否指向同一個inode |
判斷參數 | 含義 |
---|---|
-eq | 相等 |
-ne | 不等 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
判斷參數 | 含義 |
---|---|
-z | 判斷是否為空字符串,字符串長度為0則成立 |
-n | 判斷是否為非空字符串,字符串長度不為0則成立 |
string1 = string2 | 判斷字符串是否相等 |
string1 != string2 | 判斷字符串是否相不等 |
判斷符號 | 含義 | 舉例 |
---|---|---|
-a 和 && | 邏輯與 | [ 1 -eq 1 -a 1 -ne 0 ] [ 1 -eq 1 ] && [ 1 -ne 0 ] |
-o 和 || | 邏輯或 | [ 1 -eq 1 -o 1 -ne 1 ] |
特別說明:
&& 前面的表達式為真,才會執行后面的代碼
|| 前面的表達式為假,才會執行后面的代碼
; 只用于分割命令或表達式
[root@server ~]# [ $(id -u) -eq 0 ] && echo "the user is admin"
[root@server ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin"
[root@server ~]$ [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"
[root@server ~]# uid=`id -u`
[root@server ~]# test $uid -eq 0 && echo this is admin
this is admin
[root@server ~]# [ $(id -u) -ne 0 ] || echo this is admin
this is admin
[root@server ~]# [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin
this is admin
[root@server ~]# su - stu1
[stu1@server ~]$ [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin
this is not admin
注意:在(( ))中,=表示賦值;==表示判斷
[root@server ~]# ((1==2));echo $?
[root@server ~]# ((1<2));echo $?
[root@server ~]# ((2>=1));echo $?
[root@server ~]# ((2!=1));echo $?
[root@server ~]# ((`id -u`==0));echo $?
[root@server ~]# ((a=123));echo $a
[root@server ~]# unset a
[root@server ~]# ((a==123));echo $?
注意:雙引號引起來,看作一個整體;= 和 == 在 [ 字符串 ] 比較中都表示判斷
[root@server ~]# a='hello world';b=world
[root@server ~]# [ $a = $b ];echo $?
[root@server ~]# [ "$a" = "$b" ];echo $?
[root@server ~]# [ "$a" != "$b" ];echo $?
[root@server ~]# [ "$a" !== "$b" ];echo $? 錯誤
[root@server ~]# [ "$a" == "$b" ];echo $?
[root@server ~]# test "$a" != "$b";echo $?
test 表達式
[ 表達式 ]
[[ 表達式 ]]
思考:[ ] 和 [[ ]] 有什么區別?
[root@server ~]# a=
[root@server ~]# test -z $a;echo $?
[root@server ~]# a=hello
[root@server ~]# test -z $a;echo $?
[root@server ~]# test -n $a;echo $?
[root@server ~]# test -n "$a";echo $?
# [ '' = $a ];echo $?
-bash: [: : unary operator expected
2
# [[ '' = $a ]];echo $?
0
[root@server ~]# [ 1 -eq 0 -a 1 -ne 0 ];echo $?
[root@server ~]# [ 1 -eq 0 && 1 -ne 0 ];echo $?
[root@server ~]# [[ 1 -eq 0 && 1 -ne 0 ]];echo $?
1. 符號;和&&和||都可以用來分割命令或者表達式
2. 分號(;)完全不考慮前面的語句是否正確執行,都會執行;號后面的內容
3. `&&`符號,需要考慮&&前面的語句的正確性,前面語句正確執行才會執行&&后的內容;反之亦然
4. `||`符號,需要考慮||前面的語句的非正確性,前面語句執行錯誤才會執行||后內容;反之亦然
5. 如果&&和||一起出現,從左往右依次看,按照以上原則
以上就是Shell腳本中條件判斷語句的語法結構和用法的介紹,自己動手嘗試下條件語句的使用方法吧,更多內容歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。