腳本
who?
一個檔案,批量按序依次執行檔案中的指令
腳本語言:shell、python、vb、bat
一、shell(指令解釋器)
充當翻譯角色,将使用者操作轉換為核心識别操作
腳本的重要性:用于完成自動化批量操作,減少管理者工作量
腳本的組成
1)聲明解釋器(#!/bin/bash)
2)批量化操作
3)注釋(#)
4)變量、判斷等
例:
mkdir /sh
vim /sh/test1.sh
#!/bin/bash //聲明以下指令采用/bin/bash解釋器執行
cd /tmp/
mkdir ./a
touch ./a/aa
ls -r /tmp
執行:
source /sh/test1.sh 或 . /sh/test1.sh //執行腳本檔案(腳本檔案不需具有執行權限)
sh -x /sh/test1.sh //執行腳本檔案(腳本檔案不需具有執行權限,一般用于排錯)
chmod +x /sh/test1.sh && /sh/test1.sh //執行腳本檔案(以相對或絕對路徑執行,腳本檔案必須具有執行權限)
注:腳本檔案一般字尾為.sh
輸入
通過輸入裝置将将資料交由硬體處理
輸入裝置:滑鼠、鍵盤、數位闆、話筒、攝像頭
預設裝置:鍵盤、滑鼠
檔案描述編号:0
裝置檔案:/dev/stdin
passwd root 0</dev/stdin //設定root的密碼從預設輸入裝置讀取(0</dev/stdin可忽略,系統自動填寫)
passwd root </dev/stdin //效果同上
passwd root //效果同上
重定向輸入:更改輸入裝置為檔案
vim /sh/a
123
passwd root 0</sh/a //設定root的密碼從/sh/a檔案中讀取
passwd root </sh/a //效果同上
正确輸出
将硬體處理結果通過輸出裝置顯示
輸出裝置:顯示器、列印機、音響、耳機
預設裝置:顯示器
檔案描述編号:1
裝置檔案:/dev/stdout
ls -l 1>/dev/stdout //将ls -l指令的正确輸出結果輸出到預設輸出裝置(1>/dev/stdout可忽略,系統自動填寫)
ls -l >/dev/stdout //效果同上
ls -l //效果同上
重定向正确輸出:更改輸出裝置為檔案
ls -l 1>/sh/hehe //将ls -l指令的正确輸出結果輸出到/sh/hehe檔案中
ls -l >/sh/hehe //效果同上
錯誤輸出
檔案描述編号:2
裝置檔案:/dev/stderr
ls -l /eee 2>/dev/stderr //将ls -l /eee指令的錯誤輸出結果輸出到預設輸出裝置(2>/dev/stderr可忽略,系統自動填寫)
ls -l /eee>/dev/stderr //效果同上
ls -l /eee //效果同上
重定向錯誤輸出:更改輸出裝置為檔案
ls -l /eee 2>/sh/err //将ls -l /eee指令的錯誤輸出結果輸出到/sh/err檔案中
混合輸出
檔案描述編号:&
ls -l /tmp /a &>/dev/stdout //将ls -l /tmp /a指令的正确及錯誤結果輸出到預設輸出裝置(&>/dev/stdout可忽略,系統自動填寫)
ls -l /tmp /a //效果同上
重定向混合輸出
ls -l /tmp /a &>/sh/huohuo //将ls -l /tmp /a指令的正确及錯誤将結果輸出到/sh/huohuo檔案中
ls -l /tmp /a 1>/sh/suss.log 2>/sh/error.log //将ls -l /tmp /a指令的正常結果儲存到/sh/suss.log,将錯誤結果儲存到/sh/error.log
注:如需将輸出結果重定向,并不想儲存到檔案中時,可重定向到/dev/null(linux下的特殊檔案,相同于windows的資源回收筒,但内容自動清空)
二、變量
1)優點:簡化使用者操作、靈活
2)分類:
a.自定義變量:使用者自行定義,可添加删除、使用
b.環境變量:有系統維護,設定環境變量值;如path(env可檢視目前系統所有環境變量)
c.位置變量:通過指令行給腳本傳遞參數
d.預定義變量:shell中内置變量,隻能使用,不可更改
自定義變量:
格式:變量名=變量值
引用:$變量名
案例:
vim /sh/hehe.sh
#!/bin/bash
r_dir=/boot/
ls -l $r_dir
注:變量名不能以數字、特殊符号取名;建議使用大寫字母
'':單引号,強引用,不會加載變量的值
" ":雙引号,加載變量的值
例如:
a=1
b=2
echo '$a$b' //螢幕輸出$a$b
echo "$a$b" //螢幕輸出12
unset 變量名 //取消變量的定義(一般用于系統的變量定義)
腳本流程
1)指令行測試
2)編寫腳本檔案
3)添加必要的變量
4)測試
5)使用
讀取使用者輸入:
read [ -p "提示資訊" ] 變量名
vim bak.sh
read -p "請輸入需備份位置:" file
tar -zcvf /tmp/hehe.tar.gz $file
source bak.sh
變量的運算:
expr 變量1 運算符 變量2 ...
注:expr不支援小數點
運算符:
+:加法
-:減法
*:\轉義,乘法
/:除法
%:求餘運算、求模運算
bc指令:
bc //進入運算環境
scale=8 //指定保留的小數點位數
1*2-(2/2)
quit //退出
環境變量:
由系統建立并維護的變量
env //檢視目前系統所有的環境變量
path //指明軟體或指令的所有路徑
path=/tmp/aa:$path //新增指令搜尋路徑
vim /etc/profile
最後增加:path=/tmp/aa:$path //将新增路徑設定為永久生效
位置變量
$0 - $9
$0:指令名或腳本名
$1 - $9:腳本參數的位置,第一個參數、第九個參數
預定義變量
$*:所有參數的值
$#:參數的數量
$?:判斷上條指令執行結果,0為正确,非0執行錯誤
案例一:
backup.sh
tar -zcvf /tmp/111.tar.gz $* &>/dev/null
echo "已執行$0腳本"
echo "共完成$#個對象的備份"
echo "具體内容為$*"
案例二:
vim server.sh
read -p "輸入需要的操作:stop | restart | start" aa
read -p "輸出需要的服務:" bb
/etc/init.d/$bb $aa