linux/unix系統間文件備份腳本

這是我之前寫的一個shell腳本,用於linux/unix系統間的文件自動備份。


腳本的主要功能有:

  1. 用於不同服務器間當天的文件的同步或拷貝;需要expect命令支持,RHEL和AIX測試正常,需要expect命令支持(unix系統需要修改腳本第一行的#!/bin/bash爲系統SHELL);

使用要求:

        系統expect命令可用;目標(遠程)設備文件夾存在且可有相應權限。
適用情況(以下場景測試正常):
        一臺設備同一文件夾向一臺或多臺遠程設備相同或不同文件夾拷貝文件
        一臺設備不同文件夾向一臺或多臺遠程設備相同或不同文件夾拷貝文件
        AIX系統間文件非實時同步
        AIX和RHEL系統間文件非實時同步
        RHEL系統間文件非實時同步

使用前請先進行測試。

aix_trans.sh腳本代碼如下:

#!/bin/bash
#Author:ZJ
#QQ:1037509307
#DateTime: 2016-07-09 01:41:14
#Description:
#用於不同服務器間當天的文件的同步或拷貝;需要expect命令支持,RHEL和AIX測試正常,需要expect命令支持。
#aix系統需要修改頭文件;
#使用要求:系統expect命令可用;目標(遠程)設備文件夾存在且可訪問。
#適用情況:
#一臺設備同一文件夾向一臺或多臺遠程設備相同或不同文件夾拷貝文件
#一臺設備不同文件夾向一臺或多臺遠程設備相同或不同文件夾拷貝文件
#Version: v1.3
########################################源設備信息##########################################
#源設備文件路徑1 (路徑最後不要加斜線/)
Source_Path_1=/usr/appsoft/EasyCfg/system_check/warnlog
#源設備文件壓縮包名稱1
File_Name_1=file1.zip

#若需要同步該設備的其他文件夾,請按照上述格式繼續添加變量即可,示例
#源設備文件路徑2
#Source_Path_2=xxxx
#源設備文件壓縮包名稱2
#File_Name_2=file2.zip

###################################第一臺目標設備信息#######################################
#目標設備IP地址
Target_IP_A=192.168.101.206
#目標設備密碼
Target_Passwd_A=iES@1234
#目標設備文件存放路徑(請確保該文件夾存在且可被訪問)
Target_Path_A1=/usr/appsoft/jieya

#若需要將文件同步到該設備的不同文件夾下,請繼續添加文件存放路徑即可變量即可,示例
#Target_Path_A2=/usr/appsoft/jieya1
#Target_Path_A3=/usr/appsoft/jieya2

#若需要添加其他目標設備,請按照“第一臺目標設備信息”進行添加,示例:
###################################第二臺目標設備信息#######################################
#目標設備IP地址
#Target_IP_B=192.168.101.206
#目標設備密碼
#Target_Passwd_B=iES@1234
#目標設備文件存放路徑(請確保該文件夾存在且可被訪問)
#Target_Path_B1=/usr/appsoft/jieya
############################################################################################

Get_Syslog(){
LANG=EN
Month=`date +%b`
Day=`date +%e`
Ip=$1
PASSWD=$2
Source_Path=$3
Target_Path=$4
File_Name=$5
cd "${Source_Path}"
ls -l | egrep "${Month}[[:space:]]+${Day}" | awk '{print $9}' | xargs zip -r ${File_Name}
expect -c "
set timeout -1
spawn scp -r -p ${Source_Path}/${File_Name} root@${Ip}:${Target_Path}
expect {
\"*yes/no)?\" {send \"yes\r\";exp_continue}
\"*password:\" {send \"${PASSWD}\r\";exp_continue}
\"*unreachable\" {exit 1}
\"*Permission denied*\" {exit 2}
\"*No route to host*\" {exit 3}
\"*failure*\" {exit 4}
\"*No such file or directory*\" {exit 5}
\"*No match*\" {exit 6}
\"*failed*\" {exit 7}
expect eof
}

spawn ssh root@${Ip} cd $Target_Path && unzip -o $File_Name -d $Target_Path && rm -rf $Target_Path/$File_Name
expect {
\"*yes/no)?\" {send \"yes\r\";exp_continue}
\"*password:\" {send \"${PASSWD}\r\";exp_continue}
\"*unreachable\" {exit 1}
\"*Permission denied*\" {exit 2}
\"*No route to host*\" {exit 3}
\"*failure*\" {exit 4}
\"*No such file or directory*\" {exit 5}
\"*No match*\" {exit 6}
\"*failed*\" {exit 7}
expect eof
}"

} #Get_Syslog右括號

#Tips:
#Get_Syslog "目標主機IP" "目標主機密碼" "源主機文件路徑" "目標主機文件路徑" "壓縮包名稱"
#如果需要傳送多個文件夾的文件,按照下面的命令格式依次添加即可
Get_Syslog "${Target_IP_A}" "${Target_Passwd_A}" "${Source_Path_1}" "${Target_Path_A1}" "${File_Name_1}"
#示例
#Get_Syslog "$Target_IP_A" "$Target_Passwd_A" "$WEB_Path_From_2" "$Target_Path_A1" "$File_Name_2"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章