目錄
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: