防偽碼:但愿人長久,千里共嬋娟
第五章 shell腳本應(yīng)用(一)
溫馨提示: 如果想提高shell腳本的編寫速度,必須要熟練使用vi編輯器的各種快捷鍵
前言:
1、shell腳本的作用:可以批量處理、自動化完成一系列維護任務(wù),大大減輕管理員的負擔(dān)。
2、介于系統(tǒng)內(nèi)核與用戶之間,負責(zé)解釋命令行,如圖所示;
3、執(zhí)行腳本文件的方法
a、腳本文件路徑(必須有x權(quán)限)
b、sh 腳本文件路徑(必須有x權(quán)限)
c、source 腳本文件路徑(不要求有x權(quán)限)
4、交互式硬件設(shè)備
類型 | 設(shè)備文件 | 文件描述編號 | 默認設(shè)備 |
標準輸入 | /dev/stdin | 0 | 鍵盤 |
標準輸出 | /dev/stdout | 1 | 顯示器 |
標準錯誤輸出 | /dev/stderr | 2 | 顯示器 |
5、重定向操作
一、shell腳本基礎(chǔ)知識
1、 編制第一個shell腳本
1)Vi first.sh
2)在腳本文件中輸入如下內(nèi)容
3) 設(shè)置執(zhí)行權(quán)限并執(zhí)行
2、 為腳本添加注釋,友好輸出,更容易讀懂。
1)Vi first.sh
2) ./first.sh執(zhí)行腳本之后如下
3、 重定向操作
1) >表示重定向輸出,>>表示重定向追加
2) 重定向輸入,<表示重定向輸入
Vim pass.txt,在文件中添加123456
然后執(zhí)行passwd --stdin jerry < pass.txt
3)錯誤重定向,可用來收集程序執(zhí)行的錯誤信息,為排錯提供依據(jù)。
例如:執(zhí)行以下操作可以將使用tar命令備份時出現(xiàn)的錯誤信息保存到error.log文件中
4) &>操作符可以將兩類輸出信息保存到同一個文件,例如,在編譯源碼包的自動化腳本中,若要忽略make,make install的操作的過程信息,可以將其定向到空文件/dev/null
首先下載httpd軟件到本機,然后執(zhí)行Vim httpd_install.sh,并輸入如下內(nèi)容:
設(shè)置權(quán)限chmod +x httpd_install.sh
最后執(zhí)行./httpd_install.sh
4、 管道操作
例子:使用grep命令查詢使用/bin/bash作為shell的用戶名稱時,會輸出符合條件的整行內(nèi)容,在此基礎(chǔ)上可以結(jié)合管道操作與Awk命令做進一步過濾,只輸出用戶名和登錄shell列。
1) 提取之前的正常效果
2) 提取之后的效果,只顯示用戶名和shell列
3) 再例如:顯示磁盤已用的百分比
二、使用shell變量
1、自定義變量:只在自己的shell環(huán)境中有效
1)定義新的變量和引用變量
Product=benet
Version=5.0
2、變量賦值的特殊操作
1)雙引號的作用:賦值的內(nèi)容包含空格時,例如:
2) 單引號的作用:賦值的內(nèi)容中包含”$”, ““” , “ \ ”等具有特殊含義的字符時
3) 反撇號(`)的作用:用于將某個命令的輸出結(jié)果賦值給變量,例如:
4) $()的作用:可以代替反撇號,解決嵌套問題,因為反撇號不能實現(xiàn)嵌套,例如:查詢提供useradd命令程序的軟件包所安裝的配置文件位置。
5) read命令的作用:用來提示用戶輸入信息,例如:
3、 設(shè)置變量的作用范圍
新定義的變量只在當(dāng)前shell有效,如果想進入新的shell環(huán)境同樣有效,就需要使用export命令將變量導(dǎo)出為“全局變量”
也可以在export導(dǎo)出全局變量的同時,也可以為變量賦值,例如:
4、 變量的運算
例如:計算變量y的三次方,并將結(jié)果賦值給變量ycube
三、 特殊的shell變量
1、 環(huán)境變量
環(huán)境變量系統(tǒng)安裝好了就存在,不用創(chuàng)建,可以直接使用,我們先查看一下:
env
我們可以把腳本直接添加到$PATH搜索路徑中去,這樣執(zhí)行腳本的時候就不用加./了
環(huán)境變量的全局配置文件為/etc/profile,作用于所有用戶,例如:將歷史記錄命令條數(shù)改為20條,只針對root用戶
Vim /root/.bash_profile
只需要添加上面的最后一行,然后執(zhí)行source /root/.bash_profile使之生效。
2、 位置變量,例如求兩個數(shù)的和
Vi adder2num.sh
3、 預(yù)定義變量,系統(tǒng)安裝好之后就有,不能創(chuàng)建,只能使用,
例如:$#表示命令行中位置參數(shù)的個數(shù),$*表示所有位置參數(shù)的內(nèi)容,$?表示前一條命令執(zhí)行后的返回狀態(tài),返回0表示正確。$0表示當(dāng)前執(zhí)行的腳本或程序的名稱。
例如:制作備份數(shù)據(jù)腳本,vi mybak.sh
執(zhí)行腳本./mybak.sh,備份兩個文件
查看備份結(jié)果
四、 綜合案例
1、 實驗?zāi)繕耍哼h程備份mysql服務(wù)器的數(shù)據(jù)庫
2、 實驗環(huán)境:一共2臺mysql服務(wù)器A和B,在B上遠程備份A上的數(shù)據(jù)庫,在A上建立數(shù)據(jù)庫google和baidu,注意在防火墻上開啟3306端口或者關(guān)閉防火墻,并設(shè)置計劃任務(wù)定時更新
3、 實驗拓撲:
4、 實驗步驟
1) 在A上建立數(shù)據(jù)庫,
2) 在A上建立一個建立一個專用的數(shù)據(jù)庫用戶,這里我使用root賬戶,授予root賬戶對可以通過遠程主機192.168.1.2連接A
3) 在備份主機B上備份測試
查看已經(jīng)備份成功
4) 在備份主機B上編寫腳本,之前需要創(chuàng)建備份目錄 mkdir -p /opt/beifen
然后編寫腳本vi mysqlbak.sh
5)執(zhí)行備份腳本
./mysqlbak.sh
5、 設(shè)置計劃任務(wù)
Crontab -e
查看已經(jīng)備份成功
謝謝觀看,真心的希望能幫到您!
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: