腳本
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
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文件中
混合輸出
將硬件處理結果通過輸出設備顯示
輸出設備:顯示器、打印機、音響、耳機
默認設備:顯示器
文件描述編號:&
設備文件:/dev/stdout
例:
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
#!/bin/bash
tar -zcvf /tmp/111.tar.gz $* &>/dev/null
echo "已執行$0腳本"
echo "共完成$#個對象的備份"
echo "具體內容爲$*"
案例二:
vim server.sh
#!/bin/bash
read -p "輸入需要的操作:stop | restart | start" AA
read -p "輸出需要的服務:" BB
/etc/init.d/$BB $AA