shell script是利用shell的功能所寫的一個(gè)“程序”,這個(gè)程序使用純文本,將一些shell的語(yǔ)法和命令(含外部命令)寫在里面,搭配正則表達(dá)式,管道命令與數(shù)據(jù)流重定向等功能,達(dá)到我們所需要的處理目的。
shell script的用途
- 自動(dòng)化管理的重要依據(jù):管理主機(jī)的任務(wù)有查詢登錄文件、追蹤流量、監(jiān)控用戶使用主機(jī)狀態(tài)、主機(jī)各項(xiàng)硬件設(shè)備狀態(tài)、主機(jī)軟件更新查詢等
- 追蹤和管理系統(tǒng)的重要工作
- 簡(jiǎn)單入侵檢測(cè)功能
- 連續(xù)命令單一化
- 簡(jiǎn)易的數(shù)據(jù)處理
- 跨平臺(tái)支持與學(xué)習(xí)歷程較短
shell scrpit的注意事項(xiàng)
- 命令從上而下,從左至右分析和執(zhí)行
- 命令、參數(shù)間的多個(gè)空白會(huì)被忽略
- 空白行也會(huì)被忽略
- 如果讀取到一個(gè)Enter符號(hào),就嘗試執(zhí)行該行命令
- 如果一行代碼太多,可以用[enter]來(lái)進(jìn)行擴(kuò)展
- “#”作為批注
shell script如何進(jìn)行執(zhí)行
- 直接命令執(zhí)行
- 絕對(duì)路徑:/path/to/your/shell.sh
- 相對(duì)路徑: ./shell.sh
- 將shell.sh存放在PATH指定的目錄
- 以bash進(jìn)程來(lái)執(zhí)行:bash shell.sh sh shell.sh
不同執(zhí)行方法的區(qū)別
- 利用直接執(zhí)行的方式來(lái)執(zhí)行script:該script會(huì)使用一個(gè)新的bash環(huán)境執(zhí)行的腳本內(nèi)容,中途產(chǎn)生的變量不會(huì)回傳到父進(jìn)程中
- 利用source執(zhí)行腳本,會(huì)在父進(jìn)程中進(jìn)行
shell script編程基礎(chǔ)
shell script既然被稱為一門“編程語(yǔ)言”,那么就相應(yīng)的具有以下三個(gè)要素:
- 基本表達(dá)式形式
- 組合的方法
- 抽象的方法
表達(dá)式
除了調(diào)用bc進(jìn)行數(shù)值計(jì)算,我們還可以直接在bash中進(jìn)行運(yùn)算
var=$((運(yùn)算內(nèi)容)) 或 declare -i total=$number1*$number2 #+ - * / %
命名和環(huán)境
一般而言,運(yùn)算結(jié)果都需要進(jìn)行儲(chǔ)存方便再次調(diào)用,所以就引入了變量。
var=value # 定義變量
unset value # 刪除變量
echo $var # 顯示變量
declare [-aixr] var #聲明變量類型 -a:數(shù)組,-i:整形,-x:效果同于export,-r:變量設(shè)置為readonly,變量定義后默認(rèn)為字符型
#通過(guò)交互獲取用戶輸入的變量
read -p "提示信息" 變量名
#顯示信息
echo -e "輸出信息 $變量名"
變量分為環(huán)境變量和自定義變量,環(huán)境變量作用于全局bash進(jìn)程,而自定義變量作用于當(dāng)前bash進(jìn)程。我們定義的變量都是自定義變量,可以使用export var定義為環(huán)境變量
復(fù)合過(guò)程
在其他編程語(yǔ)言中都有一種稱為函數(shù)的抽象技術(shù),shell script同樣擁有。
#定義
function fname() {
}
# 例子
function printit(){
echo -n "This is a simple test "
}
printit
然而僅僅有函數(shù),知道如何定義變量還是不夠,我們可能還需要對(duì)變量進(jìn)行判斷,需要重復(fù)進(jìn)行運(yùn)算,所以我們需要if條件判斷,需要while和for的循環(huán)語(yǔ)句
條件判斷語(yǔ)句
#!/bin/bash
if [判斷1]; then
執(zhí)行內(nèi)容
##多重判斷
elif [判斷2]; then
執(zhí)行內(nèi)容
else
執(zhí)行內(nèi)容
#結(jié)束
fi
循環(huán)(loop)
# while do... done循環(huán)
while [condition]
do #循環(huán)開(kāi)始
程序段落
done #循環(huán)結(jié)束
#until do ...done循環(huán)
until [condition]
do
程序段落
done
# for...do...done(固定循環(huán))
for var in cond1 cond2 cond3...
do
執(zhí)行語(yǔ)句
done
#或類似于C語(yǔ)言
for ((i=1;i<=$num;i=i+1))
do
echo $i
done
shell script的追蹤與調(diào)試
sh [-nvx] scripts.sh
-n : 不執(zhí)行scripts,僅查詢語(yǔ)言的問(wèn)題
-v : 在執(zhí)行scripts之前,先將scripts內(nèi)容輸出到屏幕上
-x : 將使用到的scripts輸出到屏幕上
以上就是shell scripts編程的語(yǔ)法部分,僅供備忘。