創(chuàng)建shell腳本
- shell腳本第一行為指定具體shell來(lái)運(yùn)行該腳本萌狂,可以指定shell(待驗(yàn)證)
echo
-
使用echo輸出時(shí)啄骇,可以使用-n參數(shù)來(lái)不進(jìn)行換行,例如
echo "Today is :" date
環(huán)境變量
- 可以使用
set
命令查看全部環(huán)境變量 - 可以使用
$
查看具體環(huán)境變量灸促,通過(guò)echo $evnName
异旧,如果要使用echo輸出$符號(hào),可以使用轉(zhuǎn)義符echo \$
佣谐,通扯抢簦可以使用${varName}
來(lái)代替$varName
,多增加的兩個(gè)花括號(hào)用來(lái)幫助識(shí)別后面的變量名
用戶變量
- 用戶變量長(zhǎng)度最大為20個(gè)字符
- 能夠區(qū)分大小寫(xiě)
- 變量賦值時(shí)不能在
=
與變量中間存在空格狭魂,即varA="var a"
-
命令替換罚攀,即將命令輸出賦值給變量(是執(zhí)行完后將結(jié)果賦值給變量)党觅,通常可用:
- `反引號(hào)
- $() 格式
輸入斋泄、輸出重定向
輸出重定向分為:
>
覆蓋寫(xiě)杯瞻;>>
追加寫(xiě)輸入重定向分為:
<
從文件讀取炫掐;<<
內(nèi)聯(lián)輸入重定向-
內(nèi)聯(lián)輸入重定向需要指定文本標(biāo)記(marker)來(lái)確定開(kāi)始與結(jié)束魁莉, marker可以任意指定,習(xí)慣性使用EOF:
./test.sh << marker ... marker
管道—— |
ls -lrt | wc -l
- 通過(guò)管道將輸出傳給后面的命令募胃,不會(huì)用到任何中間文件與緩沖區(qū)
數(shù)學(xué)運(yùn)算
expr命令
varTest=$(expr $var1 / $var2)
-
能夠識(shí)別少量的數(shù)字和字符串操作符旗唁,包括:
ARG1 | ARG2 如果ARG1既不是null也不是零值,返回ARG1痹束,否則返回ARG2 ARG1 & ARG2 如果沒(méi)有參數(shù)是null或零值检疫,返回ARG1,否則返回0 加祷嘶、減屎媳、乘、除论巍、取余烛谊、比較 模式匹配 截取字符串 查找字符 ……
對(duì)于
*
乘要轉(zhuǎn)義為\*
,否則會(huì)作為通配符處理運(yùn)算結(jié)果賦值給變量要通過(guò)$()或者``
數(shù)學(xué)運(yùn)算符——方括號(hào)[]
varTest=$[$var1 * $var2]
- 只能進(jìn)行整數(shù)運(yùn)算
- bash shell中使用$[]可以進(jìn)行數(shù)學(xué)運(yùn)算并將結(jié)果賦值給變量
浮點(diǎn)數(shù)運(yùn)算——bc
scale=4
bc 12.73 / 16
- 浮點(diǎn)運(yùn)算精確度由內(nèi)建變量
scale
控制的环壤,若未設(shè)定則無(wú)法得到期望結(jié)果 - 在bash shell中使用:
-
簡(jiǎn)單計(jì)算晒来,使用管道+命令替換:
varTest=$(echo "scale=4; 12.73 / 16" | bc)
-
復(fù)雜計(jì)算,多個(gè)計(jì)算式郑现,使用內(nèi)聯(lián)輸入重定向:
t1=12.73 t2=16 vartTest=$(bc << EOF scale=4 var1=(12.1*2.1) var2=($t1 / $t2) var1 + var2 E0F )
-
退出腳本
shell命令退出時(shí)會(huì)返回退出狀態(tài)碼(exit status),默認(rèn)情況下荧降,shell腳本會(huì)以腳本中最后一個(gè)命令的退出狀態(tài)碼退出
- 查看退出狀態(tài)碼:
$?
- 成功結(jié)束狀態(tài)碼為0接箫,有錯(cuò)誤時(shí)狀態(tài)為正數(shù)值,其中:
- 無(wú)效命令(command not found)會(huì)返回的退出狀態(tài)碼為127
- 用戶沒(méi)有執(zhí)行命令的正確權(quán)限會(huì)返回126
- 給某個(gè)命令提供了無(wú)效參數(shù)會(huì)返回1朵诫,1代表發(fā)生了一般性未知錯(cuò)誤
自定義退出狀態(tài)碼——exit
由于退出狀態(tài)碼為[0, 255]辛友,自定義的退出狀態(tài)碼會(huì)進(jìn)行模運(yùn)算除以256取余,例如:
exit 300
通過(guò)$?
得到的退出狀態(tài)碼為44
參考文章
Linux Command Line and Shell Scripting Bible
該系列其他文章請(qǐng)查看:
Linux命令行與shell腳本