Shell腳本使用匯總整理

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

四、文件夾及子文件備份腳本:

http://www.javashuo.com/article/p-qykeinip-ds.html

相關文章
相關標籤/搜索