1 Shell 中的變量
-
使用declare聲明變量
declare var_name=var_value
# declare -i var_name 將定義的變量定義為整數(shù)型變量
# declare -r var_name 聲明的變量為只讀 變量
# declare -p var_name 顯示指定變量的屬性和值
# declare -x var_name 將指定的變量通過環(huán)境輸出到后續(xù)命令
-
清除變量
unset var_name # unset function_name 清除變量或函數(shù)
2 變量的引用
`` # 反引號,shell會(huì)將反引號中的內(nèi)容視作命令,并用指向結(jié)果代替反引號以及反引號中的內(nèi)容
'' #單引號,全引用,單引號中的所以內(nèi)容都不會(huì)被解釋成其他意思,只保留顯示的意義
""# 雙引號,半引用,雙引號中的內(nèi)容處理 `` '' "" $ \ 之外,均保留顯示的意義
取變量的值
- 使用 $var_name # 獲取變量的值,可能會(huì)出錯(cuò)
- 使用 ${var_name} # 推薦使用這種方式獲取變量的值
3 算術(shù)表達(dá)式
-
使用let
let var=" var + 1"
let var=${var}+3
# 使用let時(shí)如果要在運(yùn)算符左右使用空格,那么必須加上雙引號
# 使用let 使用可以使用$,也可以不實(shí)用$
-
使用 expr
var=`expr $var1 \* $ var2`
# **實(shí)用expr時(shí)運(yùn)算符左右必須實(shí)用空格,變量必須使用$ **
-
使用 $(())
var=$(( var1 +${var2} ))
# 可以使用$,也可以不使用$,運(yùn)算符左右可以使用空格也可以不適用空格
-
使用$[]
var=$[ ${var1}+ var2 ]
# 可以使用$,也可以不使用$,運(yùn)算符左右可以使用空格也可以不適用空格
-
使用
bc# 前面的集中方法只能用于處理整數(shù)而不能用于處理浮點(diǎn)數(shù)運(yùn)算
#
bc提供任意精度的計(jì)算1 直接使用外部程序 bc
-
2 使用管道
res=` echo "${var1}/10 + 2*(3-5*4)" | bc -l `
4輸入輸出
-
read輸入read -r var1 var2
-
printf格式化輸出printf "%.3f\n" ${var}
5命令替換
- `shell_command`
$(shell_command)
6測試
-
字符串測試
# 字符串測試
-
整數(shù)測試
# 整數(shù)測試
-
文件測試
# 文件測試
7函數(shù)
1定義
func_name(){ statment1 statment2 } # or function func_name(){ statment1 statment2 }
2調(diào)用
func_name arg1 arg2 arg3
3函數(shù)鏈接/函數(shù)調(diào)用函數(shù)
helloWord(){ echo "Hello World" } function alice(){ echo "in allice" helloWord() echo "end" } #調(diào)用函數(shù) allice()
4函數(shù)返回值
Shell 中的函數(shù)的返回值必須是0-255之間的整數(shù),即函數(shù)只能返回狀態(tài)碼
函數(shù)的返回值可以通過
$?來獲取
5獲取函數(shù)參數(shù)
# $# 獲取參數(shù)的個(gè)數(shù) # $n 獲取第n個(gè)參數(shù),其中n為正整數(shù) # $@ $* 獲取所有參數(shù)# 移動(dòng)位置參數(shù) # shift function func(){ while (( $# > 0 )) do echo "${1}" echo $# #shift改變$#的值 shift done }#間接參數(shù)傳遞 var1=var2 var3=var1 echo ${!var3} #output var2# 傳遞數(shù)組 # shell 不支持傳遞數(shù)組,但是可以通過其他方式傳遞數(shù)組的值 func_name "${arr[@]}" # 雙引號必須加,否則會(huì)出錯(cuò)# 調(diào)用其他文件的函數(shù) #! /bin/bash #載入函數(shù)庫 . file_name.sh # dot 后面必須有**空格**