Shell腳本1
一、編制第一個shell腳本
Shell腳本的作用1:實現了"批量處理"的自動化過程
1.當前系統所支持的shell腳本種類
2.創建第一個腳本文件
新建first.sh文件
腳本里寫三條命令
切換到/boot目錄
打印當前路徑
以人可讀的形式將以vml開頭的文件以長格式顯示出來
添加可執行權限
執行此腳本文件后,輸出結果與依次單獨執行這三條命令是相同的
直接運行腳本文件
一個合格的shell腳本程序應該遵循標准的腳本結構,而且能夠輸出友好的提示信息,更加容易讀懂
#!/bin/bash是一行特殊的腳本聲明表示此行以后的語句通過/bin/bash程序來解釋執行,其他以#開頭的語句表示注釋信息,echo用於輸出字符串,使腳本的輸出信息更通俗易懂
執行腳本的三種方式
1) ./腳本名,要求文件本身具有x可執行權限,外部不會收到影響
2) sh 腳本名,通過/bin/sh來解釋腳本,外部不會收到影響
3) . 腳本名 通過點號來執行腳本,使用這個方式,外部將會跟着腳本文件走
4) source 腳本名 通過命令source加載腳本,使用這個方式,外部將會跟着腳本文件走
二、重定向與管道操作
1.重定向操作
標准輸入:從該設備接收用戶輸入的數據
標准輸出:通過該設備向用戶輸出數據
標准錯誤:通過該設備報告執行出錯信息
重定向輸出
>:覆蓋文件 >>:追加文件
單獨執行一個命令,輸出結果會顯示在屏幕上
使用>,可以把輸出結果保存在指定文件中,如果文件不存在,則會新建該文件
但是再使用>將輸出結果保存到同一文件中,文件原先的內容將會被覆蓋
如果要保存文件原先內容,並將之后的輸出結果保存在文件中(即追加),就要使用>>
重定向輸入
含義:將命令中接收輸入的途徑由默認的鍵盤改為指定的文件,而不是等待從鍵盤輸入
為用戶設置密碼,正常輸入需要輸2次密碼,使用<自動完成密碼設置
創建一個文件,添加初始密碼為abc123
使用—stdin識別標准輸入
從pass.txt文件中取密碼
錯誤重定向
使用2>,2時錯誤文件的編號,使用標准輸出和標准輸入重定向時,省略了1,0編號
正常顯示結果
顯示結果保存到文件里
2.管道操作
檢索/etc/passwd文件以/bin/bash結尾的內容
awk 提取字符串
以冒號:作為分隔,輸出第一個,第七個區域的字符串,-F指定分隔符號,未指定時(-F也不要)以空格或制表符分隔
查看磁盤分區使用情況
提取根分區(/)的磁盤使用率信息
檢索df -hT輸出結果中以/結尾的內容,並提取第6個字符串
三、使用shell變量,自定義變量
1.定義新的變量
基本格式:變量名=變量值
2.查看和引用變量的值
對於未定義的變量,將顯示為空值;當變量名稱容易和緊跟其后的其他字符相混淆時,需要添加大括號{}將其括起來,否則將無法確定正確的變量名稱
3.變量賦值的特殊操作
雙引號
定字符串,賦值內容含空格
使用$可以引用其他變量的值(變量引用)
單引號
不再引用其他變量的值,任何字符均作為普通字符看待,賦值內容包含單引號(')時,需使用\'進行轉義,避免沖突
反撇號
用於命令替換,允許將執行某個命令的屏幕輸出結果賦值給變量,反撇號內必須是能夠執行的命令行,否則出錯
以人可讀的形式將which useradd的輸出結果以長格式顯示出來
which useradd 查看useradd命令的存放位置
提取vsftpd服務的禁止登錄用戶列表,並將其賦值給變量DenyList
$()實現嵌套命令替換操作
查看useradd命令的存放位置
查詢提供useradd命令程序的軟件包
查詢提供useradd命令程序的軟件包所安裝的配置文件位置
read命令
用來提示用戶輸入信息,實現簡單的交互過程
格式:read 變量名
輸入變量值
等待用戶輸入文字,並將輸入的內容賦值給變量English
read結合-p選項來設置提示信息
提示用戶輸入需要學習的單詞,並將輸入的信息賦值給變量English
4.設置變量的作用范圍
新定義的變量只在當前的shell環境中有效,即局部變量,當進入另一個shell環境時,局部變量將無法再使用
查看當前定義的變量值
進入子shell環境
無法調用父shell環境中的變量
返回原有的shell環境
export將指定的變量導出為全局變量
查看當前定義的變量值
將English設為全局變量
進入子shell環境
可以調用父shell的全局變量
返回原有的shell環境
用export導出為全局變量的同時,也可以為變量進行賦值
新建一個名為English的全局變量,賦值Chinese
5.數值變量的運算
格式:expr 變量1 運算符 變量2 [運算符 變量3]……
+:加法運算
-:減法運算
\*:乘法運算,只寫*會被當成通配符
/:除法運算
%:求模運算,又稱取余運算,計算相除后的余數
設置X=35,Y=16兩個變量,演示X,Y的加減乘除模
將運算結果賦值給其他變量
先算乘除后算加減
先算括號再算剩下
四、特殊的shell變量
1.環境變量
用於設置用戶的工作環境,包括用戶宿主目錄、命令查找路徑、用戶當前目錄、登錄終端等
Env可以查看到當前工作環境下的環境變量
用grep -v反轉,可以忽略掉不必要看得信息
SHELL用戶當前登錄環境
HISTSIZE命令歷史條數
SSH_CLIENT ssh客戶端登錄終端
USER用戶名
MAIL郵件存放目錄
PATH命令搜索路徑
PWD當前目錄
LANG語言和字符集
HOME當前用戶宿主目錄
LOGNAME當前用戶名
希望直接通過文件名稱來運行腳本
確認腳本位置
查看當前搜索路徑
直接執行時找不到命令
將/root添加到搜索路徑
查看修改后的搜索路徑
直接以文件名運行腳本
環境變量的全局配置文件為/etc/profile,用戶獨立配置文件/用戶宿主目錄/.bash_profile
記錄的歷史命令條數默認為1000
將記錄的歷史默認條數改為50
2.位置變量
例:ls -l -h中ls是命令名,即$0,-l是第一個位置變量,即$1,-h是第二個,即$2
編寫一個加法運算的腳本add.sh,用來計算兩個整數的和
為腳本文件添加可執行權限
$1為1,$2為1
$1為2,$2為3
3.預定義變量
$#:表示命令行中位置參數扥個數
$*:表示所有位置參數的內容
$?:表示前一條命令執行后的返回狀態,0執行正確,非0異常
$0:表示當前執行的腳本或程序的名稱
編寫一個創建目錄的腳本
創建了123
編寫一個刪除目錄的腳本
刪除了123
Shell腳本與計划任務
1.確定備份方案
備份主機:192.168.10.3,真機192.168.10.1通過finalshell建立ssh連接連接到目標主機
數據庫服務器:192.168.10.3,MySQL服務監聽的端口為3306
備份內容:將MySQL服務器中的wujiguo庫進行備份每天凌晨02:00執行,將庫備份為獨立的.sql文件,然后壓縮為.tar.gz格式,文件名中嵌入執行備份時的日期和時刻
創建用戶wang,並對其賦予select查詢,lock tables鎖定表權限
從備份主機測試數據庫訪問,查詢授權等是否有效
2.編寫MySQL備份腳本
創建備份目錄
時間格式:YYYYmmdd-HHMM
添加執行權限
手動執行備份腳本
確認備份結果
3.設置計划任務
將腳本轉移至備份目錄
在00:15執行腳本程序
查看crond運行狀態,確保其已運行
再次執行(因為之前的備份文件被手動刪除了)
時間到了,備份了02:00的
Date同步時間
顯示系統時間
hwclock命令 (即hardwareclock系統硬件時間)#hwclock
顯示硬件時間
#hwclock -w
將系統時間寫入到系統硬件當中
ntpdate
ntpdate 是一個linux時間同步服務軟件,具體的詳細資料請參考下百度,有很多詳細的資料
查看本機是否安裝ntpdate服務,如果沒有安裝,請 yum install -y ntpdate
同步時間
輸入ntpdate time.nist.gov同步網絡時間
結果:3 Jun 15:42:39 ntpdate[4721]: adjust time server 211.115.194.21 offset -0.005885 sec
出現上述結果代表時間同步成功,上面的大致意思為調整時間為服務器211.115.194.21的時間,相差-0.005885秒的時間
如果上面time.nist.gov服務器同步不了,可以換下面幾個時間服務器試試: time.nist.gov
time.nuri.net
0.asia.pool.ntp.org
1.asia.pool.ntp.org
2.asia.pool.ntp.org
3.asia.pool.ntp.org
同步時間成功后調整硬件時間
#hwclock -w
執行成功后, 查看系統硬件時間(不出意外的話,現在date和hwclock現實的時間均為internet時間)#date
#hwclock
執行上述命令,顯示的時間應該一樣的
定時執行時間同步任務,所以我們利用crontab -e 來添加定時任務
/1 ntpdate time.nuri.net;hwclock -w
即:#每隔一個小時同步一下internet時間,並寫入硬件