Shell腳本使用匯總整理php
1、Shell腳本經常使用的頭部格式:html
頭部的做用就是告知linux此腳本的類型;mysql
經常使用的頭部格式以下:(/bin/bash,是bash的路徑,若是不知道路徑能夠經過which bash進行查看,其它命令的路徑也是相似查看的)linux
(1)#!/bin/bash:普通的linux腳本,也是最經常使用的,不須要交互;sql
(2)#!/usr/bin/expect:能夠自動交互的linux腳本,有可能須要安裝expect,若是linux服務器上沒有此expect命令的話。shell
2、Shell腳本中如何執行Linux或自定義的腳本命令:數據庫
在普通的#!/bin/bash腳本中,執行linux命令,通常要寫該命令的全路徑,若是不知道全路徑的,能夠經過which 命令,進行查看全路徑,若是須要後臺執行,就在命令最後+空格+&。數組
3、Shell腳本中如何進行自動交互:bash
若是須要在shell腳本中實現自動交互,通常是經過expect進行實現的,方便好用,須要注意的是expect腳本中多是不能執行一些linux命令的,若是必定須要執行該linxu命令,能夠將該Linxu命令寫入到一個普通的shell腳本中去,而後在expect腳本中經過調用執行該linux命令的普通腳本,從而實現需求;服務器
Expect腳本具體寫法能夠參考如下鏈接:
https://www.cnblogs.com/lixigang/articles/4849527.html
4、Shell腳本如何定時執行:
Linux中定時執行shell腳本,能夠經過crond進行控制,須要linux中安裝crond,並在經過crontab -e命令進行配置,具體參照如下鏈接:
http://www.javashuo.com/article/p-xahiqhuj-t.html
設定定時任務:
crontab -e 而後添加一條定時任務信息 保存文件 service crond restart
修改定時任務:
crontab -e 而後修改某個定時任務信息 保存文件 service crond restart
刪除定時任務:
crontab -e 而後刪除某個定時任務信息 保存文件便可 service crond restart
查看定時任務:
crontab -l
5、腳本中經常使用功能:
一、定義變量:
變量名+等號+值(若是是非數字的建議加上雙引號)
二、獲取變量:
(1)$變量名:此方法獲取不太好,沒有明確的變量邊界;
(2)${變量名}:建議用此方法,變量名有明確的邊界;
三、定義數組:
變量名+等號+括號(括號中的內容用空格分割)
四、獲取數組中某個角標的值:
${數組名[角標]}:此方法能夠獲取某個數組中某個角標的值
五、獲取當前日期:
六、獲取幾天前日期:
七、獲取幾天後日期:
將幾天的數字修改成負數便可
八、加強for循環:
九、普通for循環:
十、輸出信息:
echo 變量或字符串均可以,用雙引號擴住便可;
十一、字符串拼接:
直接變量加字符串拼接就行,不須要有+;
十二、字符串剪切:
(1)從左邊第幾個字符開始,截取幾個字符:
(2)從左邊第幾個字符開始,一直到結束:
(3)從右邊第幾個字符開始,截取幾個字符:
(4)從右邊第幾個字符開始,一直到結束:
1三、字符串分隔:
1四、條件判斷if:
1五、經常使用的運算符:
(1)算數運算符:
(2)關係運算符:
(3)布爾運算符:
(4)字符串運算符:
(5)文件測試運算符:
1六、讀取文件中的數據存儲到一個數組中去:
1七、讀取文件中的鍵值對數據存儲到一個map中去:
注意:文件中的值必定要是鍵值對的形式,而且第一列中的名稱通常是定死的,不能任意修改;
主要思路:
(1)首先經過兩次讀取兩列的內容存儲到兩個數組中去;
(2)而後遍歷一個數組,用第一個數組中的值做爲key,第二個數組中的值做爲value值,存儲到map中去;
(3)在須要的時候,能夠從map中經過輸入某個key值獲取其value值;
默認是用空格分列的:
指定分列的符號爲「=」:
1八、判斷一個文件是否存在:
判斷文件使用:-f
1九、判斷一個文件夾是否存在:
判斷文件夾使用-d
20、定義一個map以及常見使用方法:
若是()中沒有內容,那就是一個空map;
其它shell基本經常使用功能見鏈接:
http://www.runoob.com/linux/linux-shell.html
6、經過shell腳本定時自動備份mysql數據庫數據到sql文件:
一、主要思路:
(1)定義一個數據庫備份信息的txt文件,其中有如下幾項:
用戶名
密碼
備份的數據庫(多個庫用逗號分隔)
備份數據文件的路徑
保留備份文件的天數
數據導出工具mysqldump的文件路徑
(2)定義一個腳本.sh文件,具體功能以下:
讀取txt文件中的信息到一個map中去;
獲取備份的數據庫字符串,經過分割,結果存儲到數組中;
獲取當前日期和保留文件天數之前的日期;
首先經過遍歷備份數據庫數組,刪除保留文件天數外的sql文件;
而後再次遍歷備份數據庫數組,導出數據庫中的數據到sql文件;
(3)經過crontab -e命令編輯crontab文件,將後臺定時執行腳本.sh文件,而後service crond restart從新啓動crond,以便經過crond定時執行腳本文件,實現定時備份mysql數據庫中的數據到sql文件中去。
二、具體代碼:
(1)備份數據庫信息的txt信息以下:
username=root password=123456 backupsFileStr=/wocloud/db/backups backupsFileDay=3 mysqldumpStr=/usr/bin/mysqldump copydb=jeecg,kettle,km,dataSharing,hebei,reportSystem
(2)腳本.sh文件信息以下:
#!/bin/sh #db_backups_conf.txt文件路徑 db_backups_conf="/wocloud/shell/db_backups_conf.txt" #判斷文件是否存在 if [ -f "${db_backups_conf}" ];then echo $(date +'%Y-%m-%d %H:%M:%S')" 數據庫配置信息文件存在,開始進行數據備份" #獲取等號前內容,做爲map中的Key值 dbArrOne=($(awk -F'[=]' '{print $1}' ${db_backups_conf} )) #獲取等號後內容,做爲map中的value值 dbArrTwo=($(awk -F'[=]' '{print $2}' ${db_backups_conf})) #建立一個空map declare -A map=() #經過循環,將db_backups_conf配置文件中的信息存儲在map中 for((i=0;i<${#dbArrOne[@]};i++)) do map[${dbArrOne[i]}]=${dbArrTwo[i]} done #獲取備份數據庫的字符串 copyDb=${map["copydb"]} #獲取默認的字符串分隔符 old_ifs="$IFS" #設置字符串分隔符爲逗號 IFS="," #將備份數據庫value值的字符串進行分隔,獲取一個數組 dbArr=($copyDb) #將字符串的分隔符從新設置爲默認的分隔符 IFS="$old_ifs" #獲取當前年月日 saveday=$(date +%Y%m%d) #獲取超出備份天數的年月日 delday=$(date -d ${map["backupsFileDay"]}' days ago' +%Y%m%d) #遍歷要備份的數據庫,刪除兩天前備份的數據文件 for delDb in ${dbArr[@]}; do echo $(date +'%Y-%m-%d %H:%M:%S')" 刪除文件:"${map["backupsFileStr"]}/${delDb}_database_${delday}.sql rm -f ${map["backupsFileStr"]}/${delDb}_database_${delday}.sql done #遍歷要備份的數據庫,備份數據文件 for saveDb in ${dbArr[@]}; do echo $(date +'%Y-%m-%d %H:%M:%S')" 備份數據庫:"${saveDb} ${map["mysqldumpStr"]} -u${map["username"]} -p${map["password"]} ${saveDb} > ${map["backupsFileStr"]}/${saveDb}_database_${saveday}.sql done echo $(date +'%Y-%m-%d %H:%M:%S')" 數據備份完畢,腳本執行完畢" else echo "文件不存在" fi
(3)crontab定時後臺執行shell腳本命令以下:(必定要將shell腳本重定向到一個文件中去,以便接收shell腳本的echo輸出信息和異常信息)
2、腳本中打印日誌信息,製做腳本執行日誌文件:
在編寫腳本過程當中,關鍵的步驟點,能夠經過echo打印日誌信息到桌面顯示屏中。通常編寫的shell腳本都是須要定時執行的,通常經過crond就能夠簡單的實現shell腳本的定時執行,經過crontab -e編寫定時任務的時候,必定要記住,將shell腳本中打印日誌的信息重定向到一個文件中去,這樣就能夠經過觀察此文件中的日誌信息來觀察shell是否正常運行了。
輸出日誌經常使用格式:年-月-日 時:分:秒 日誌內容
crond中設定定時任務時,重定向的日誌文件,最好是在一個文件夾下,每次輸出一個文件,這樣文件添加一個日期就能夠輕鬆解決,之後也方便查看日誌:文件名_日期.txt:
12 10 * * * /wocloud/shell/mysqlBackupsSql.sh &>/wocloud/shell/mysqlBackupsLogs/mysqlBackupsEcho_`date +\%Y-\%m-\%d`.txt 2>&1
很是注意:日誌格式化中用的是斜號(Esc下面那個鍵),不是單引號;
7、經常使用的工具化sh腳本:
一、達夢數據庫備份腳本:
http://www.javashuo.com/article/p-hiayvxjp-dt.html
二、mysql數據庫5.7.8之前版本備份腳本:
http://www.javashuo.com/article/p-voebspan-ea.html
三、mysql數據庫5.7.8之後版本備份腳本:
http://www.javashuo.com/article/p-vbjzgwml-dw.html
四、文件夾及子文件備份腳本: