shell 編程:條件測試語句和 if 流程控制語句的使用

目錄

1. read 命令

介紹:

實例:

2. 流程控制語句 if

單分支:

雙分支:

多分支:

實例:

3. test 測試命令

數值比較:

字符串比較:

文件比較:

實例:

4. 流程控制過程中複雜條件和通配符

三種判斷:

通配符:

實例:


1. read 命令

介紹:

從鍵盤讀取變量的值,通常在 shell 腳本中與用戶進行交互的場合。該命令可以一次讀取多個變量的值,變量和輸入的值都需要使用空格隔開。在 read 命令後面,如果沒有指定變量名,讀取的數據將被自動賦值給特定的變量 REPLY。

實例:

從標準輸入讀取一行並賦值給變量:

讀取多個值:

隱藏輸入:

限制輸入的時間:

限制輸入的長度:

提示符:


2. 流程控制語句 if

單分支:

if 條件
then
    commands
fi

雙分支:

if 條件
then
    commands
else
    commands
fi

多分支:

if 條件1
then
    commands
elif 條件2
then
    commands
elif 條件3
then
    commands
......
else
    commands
fi

實例:

判斷用戶在系統中是否存在,是否存在家目錄:


3. test 測試命令

數值比較:

參數 說明 示例
-eq 等於則爲真 [ "$a" -eq "$b" ]

-ne

不等於則爲真 [ "$a" -ne "$b" ]
-gt 大於則爲真 [ "$a" -gt "$b" ]
-ge 大於等於則爲真 [ "$a" -ge "$b" ]
-lt 小於則爲真 [ "$a" -lt "$b" ]
-le 小於等於則爲真

[ "$a" -le "$b" ]

字符串比較:

參數 說明 示例
== 等於則爲真 [ "$a" == "$b"]
!= 不等於則爲真 [ "$a" != "$b"]
-z 字符串 字符串的長度爲零則爲真 [ -z "$a" ]
-n 字符串 字符串的長度不爲空則爲真 [ -n "$a" ]
str1 > str2 str1 大於 str2 則爲真 [ str1 \> str2 ]
str1 < str2 str1 小於 str2 則爲真 [ str1 \< str2 ]

文件比較:

參數 說明 示例
-e 文件名 如果文件或目錄存在則爲真 [ -e file ]
-r 文件名 如果文件存在且可讀則爲真 [ -r file ]
-w 文件名 如果文件存在且可寫則爲真 [ -w file ]
-x 文件名 如果文件存在且可執行則爲真 [ -x file ]
-s 文件名 如果文件存在且至少有一個字符則爲真 [ -s file ]
-d 文件名 如果文件存在且爲目錄則爲真 [ -d file ]
-f 文件名 如果文件存在且爲普通文件則爲真 [ -f file ]
-c 文件名 如果文件存在且爲字符型文件則爲真 [ -c file ]
-b 文件名 如果文件存在且爲塊文件則爲真 [ -b file ]
file1 -nt file2 檢查 file1 是否比 file2 新 [ file1 -nt file2 ]
file1 -ot file2 檢查 file1 是否比 file2 老 [ file1 -ot file2 ]

實例:

比較兩個數的大小:

判斷用戶是不是超級用戶:

清空日誌:


4. 流程控制過程中複雜條件和通配符

三種判斷:

if [ 條件判斷1 ] &&(||) [ 條件判斷2 ]

if [ 條件判斷1 -a(-o) 條件判斷2 ]

if [[ 條件判斷1 &&(||) 條件判斷2 ]]:雙 "[]" 對 *、<、> 等符號不需要轉義

通配符:

字符 含義 實例
* 匹配 0 或多個字符

a*b,如 aab、ab、axyzb

匹配任意一個字符

a?b,a 與 b 之間只能有一個字符,如 aab、acb

[list] 匹配 list 中的任意單一字符 a[xyz]b,a 與 b 之間必須只能有一個字符,如 axb、ayb
[!list] 匹配除 list 中的任意單一字符 a[!0-9]b,a 與 b 之間必須只能有一個字符,如 acb、a-b
[c1-c2]

匹配 c1-c2 中的任意單一字符

a[0-9]b,如 a0b、a9b

{string1,string2,...} 匹配 string1 或 string2 或(...)其一字符串

a{qwe,asd,zxc}b,如 aqweb、aasdb

實例:

設置 umask:

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