Shell腳本(1)


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時間,並寫入硬件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM