shell特殊變量
$0 當前腳本的文件名
$n 傳遞給腳本或函數的參數; n 是一個數字,表示第幾個參數;也可以用於函數的參數
$# 傳遞給腳本或函數的參數個數
$* 傳遞給腳本或函數的所有參數
$@ 傳遞給腳本或函數的所有參數
$? 上個命令的退出狀態,或函數的返回值
$$ 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID
$* 和 $@ 的區別:
$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號""包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數
當它們被雙引號""包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數
運算符
算術運算符:+ - * / % = == !=
關系運算符:-ne -eq -gt -lt -ge -le
布爾運算符:!(非) -o(或) -a(與)
字符串運算符:== != -z(空) -n(非空)
文件測試操作:
-e 文件是否存在
-f 是否為普通文件
-d 是否為目錄
-w 是否具有寫權限
-x 是否具有執行權限
條件語句
if <condition>; then
<statement>
fi
if <condition> ; then
<statement>
elif <condition>; then
<statement>
else
<statement>
fi
case <variable> in <range>
<value>)
<statement>
;;
esac
循環語句
while <condition>; do
<statement>
done
for <variable> in <range>; do
<statement>
done
shell函數
function <function_name>() {
<statement>
}
函數調用以及傳參: <function_name> <para1> <para2>...<paran>
shell替換
`` <=> $() 命令替換
$ 、${} 變量替換,一般情況下沒有區別
$(()) 其中的變量名稱,可於其前面加 $ 符號來替換,也可以不用
[[是 bash 程序語言的關鍵字,支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式;
字符串比較時可以把右邊的作為一個模式,而不僅僅是一個字符串,而[]內不能使用正則
set -e 用法
當命令以非零狀態退出時,則退出shell
主要作用是當腳本執行出現意料之外的情況時立即退出,避免錯誤被忽略,導致最終結果不正確
一般放在shell腳本開始位置(位於 #!/bin/bash 之后)
<<<
<<< 被稱為here-string,用於給程序預先設置一個文本字符串,從而避免在程序運行過程中手動鍵入文本。
cat <<< “TEST”# 打印文本 TEST
xargs rm –rf <<< “a.h b.h c.h”# 刪除文件 a.h b.h c.h
=~
=~ 為正則匹配,用來判斷右邊的參數是否符合左邊的要求。
[[ "tongyishu" =~ [0-9] ]] # 不匹配,未包含數字
echo $? # output 1
[[ "tong123yishu" =~ [0-9] ]] # 匹配,包含數字
echo $? # output 0
sh -c
sh -c 可以讓 bash 將一個字符串作為一個完整的命令來執行
sh -c "echo tongyishu" # 輸出 tongyishu