天天看點

腳本

腳本

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