腳本

腳本

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章