03-shell測試條件

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容