1. 語法
1.1 基本語法
[ 條件表達式 ] 推薦使用
[[ 條件表達式 ]] 該法支持正則
1.2 與
使用
-a或&&
[ 條件表達式1 -a 條件表達式2 ]
或
[ 條件表達式1 ] && [ 條件表達式2 ]
1.3 或
使用
-o或||
[ 條件表達式1 -o 條件表達式2 ]
或
[ 條件表達式1 ] || [ 條件表達式2 ]
2. 文件測試
2.1 語法
[ -e dir|file ] 測試文件是否存在
[ -d dir ] 測試是否是目錄
[ -f file ] 是否存在,而且是文件
[ -r file ] 當前用戶對該文件是否有讀權限
[ -x file ] 當前用戶對該文件是否有執(zhí)行權限
[ -w file] 當前用戶對該文件是否有寫權限
[ -L|h file ] 當前文件是否是一個鏈接,等價于-h
2.2 示例
- 示例1
判斷文件是否存在
[root@liubei ~]# [ -e /etc/passwd ]
[root@liubei ~]# echo $?
0
[root@liubei ~]# [ -e /etc/hello ]
[root@liubei ~]# echo $?
1
- 示例2
如果目錄
/tmp/hello不存在,則創(chuàng)建文件夾
if [ ! -d "/tmp/hello" ]; then mkdir /tmp/hello; fi
3. 數(shù)值比較:
3.1 shell風格
- 比較符號
-eq 等于, -ne 不等于
-lt 小于, -gt 大于
-le 小于等于,-ge 大于等于
- 示例
# [ 100 -gt 20 ]
# echo $?
0
3.2 C語言風格比較
-
語法
((M<N))
兩層括號
可以直接用符號鏈接,不必在意空格
- 示例
[root@liubei ~]# ((100>20))
[root@liubei ~]# echo $?
0
[root@liubei ~]# ((100<20))
[root@liubei ~]# echo $?
1
4. 字串比較
4.1 判斷字符串長度是否為0
注意:空值和未定義都為0
- 語法
[ -z $變量 ]
- 示例
判斷是否輸入用戶名
#!/bin/bash
read -p "input name : " user_a
if [ -z $user_a ]
then
echo "null"
else
echo "ok"
fi
4.2 比較兩個字串是否相同:
- 語法
[ $變量 = “值” ]
[[ $USER = “root” ]] 支持正則
注意:等號兩邊必須空格
- 示例
#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" ]
then
echo "OK"
else
echo "NO"
fi
輸入 root 則輸出OK,輸入其他用戶名則輸出NO
- 示例2: [[ ]]支持正則
#!/bin/bash
read -p "input name : " user_a
if [[ $user_a = "root" ]]
then
echo "OK"
else
echo "NO"
fi
輸出如下:
[root@liubei tmp]# bash test.sh
input name : rooooot
OK
- 示例3:邏輯運用
輸入 root 或 liubei 則輸出OK,輸入其他用戶名則輸出NO
#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" -o $user_a = "liubei" ]
then
echo "OK"
else
echo "NO"
fi
或
#!/bin/bash
read -p "input name : " user_a
if [ $user_a = "root" ] || [ $user_a = "liubei" ]
then
echo "OK"
else
echo "NO"
fi
5. 是否包含
- 語法
[[ "字串" =~ 要查詢字串 ]]
或者
[[ 變量 =~ 要查詢字串 ]]
注意:
該判必須是 [[ ]],要查詢部分支持正則
- 示例
判斷輸入的用戶是否以
r開頭
#!/bin/bash
read -p "input name : " user_a
if [[ $user_a =~ ^r ]]
then
echo "OK"
else
echo "NO"
fi
