Shell-实际业务操作03
生活随笔
收集整理的這篇文章主要介紹了
Shell-实际业务操作03
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
#!/bin/sh ############################## ## 名稱: TarCdrAndTransfer.sh ## 描述: 將/bakcdr/cdrbak/VOICE[DATA/SMS]/normal目錄下的日期目錄Tar成GZ包,mv到 /bakcdr/cdrbak/VOICE/gz_file, ## 然后通過FTP傳遞到目標(biāo)主機(jī) 152 cdr/cdr用戶對(duì)應(yīng)的目錄下 ## 參數(shù): 暫無 ## 作者: Yang.Shangwei ## 日期: 2017-06-17 ## 版本:V1.1 ## 修改:當(dāng)天的話單不壓縮 ## 備注:遠(yuǎn)程主機(jī)的目錄目前是提前創(chuàng)建,暫未在腳本中校驗(yàn)創(chuàng)建 ## 注意:如果ls獲取的文件長度超過系統(tǒng)默認(rèn)的命令緩沖區(qū)最大長度會(huì)導(dǎo)致錯(cuò)誤。不適合目錄下文件特別多的情況. ###############################定義退出標(biāo)識(shí)符, 腳本執(zhí)行后,通過echo $? 查看退出標(biāo)識(shí)符,即上個(gè)命令或者腳本的返回結(jié)果 EXIT_FAILURE=1 #Failing exit status EXIT_SUCCESS=0 #Successful exit status #當(dāng)前時(shí)間 BEGIN_TIME=`date +%s` #當(dāng)天,用于判斷是否壓縮話單 CDR_TODAY=`date "+%Y%m%d"`#當(dāng)前執(zhí)行腳本的全路徑 SCRIPT_PATH=$(cd `dirname $0`; pwd) SCRIPT_NAME=`basename $0` #日志路徑 LOG_LOCATION=/ocs/tools/OperCDR/logs#話單主機(jī)標(biāo)識(shí) CDR_HOST=`hostname | awk 'BEGIN{FS="_"}{print substr($2,1,4)}'|tr '[a-z]' '[A-Z]'` DATA_FLAG=_DATA_ VOICE_FLAG=_VOICE_ SMS_FLAG=_SMS_#存放Tar過的文件目錄 STORED_DIR_DATA=/bakcdr/cdrbak/TARGED_MENU/DATA STORED_DIR_VOICE=/bakcdr/cdrbak/TARGED_MENU/VOICE STORED_DIR_SMS=/bakcdr/cdrbak/TARGED_MENU/SMS#話單目錄文件 VOICE_NORMAL=/bakcdr/cdrbak/VOICE/normal VOICE_GZ_FILE=/bakcdr/cdrbak/VOICE/gz_fileDATA_NORMAL=/bakcdr/cdrbak/DATA/normal DATA_GZ_FILE=/bakcdr/cdrbak/DATA/gz_fileSMS_NORMAL=/bakcdr/cdrbak/SMS/normal SMS_GZ_FILE=/bakcdr/cdrbak/SMS/gz_file#遠(yuǎn)程目標(biāo)主機(jī)IP 用戶名 密碼 HOST="172.25.243.152" USER="cdr" PASSWD="cdr" #遠(yuǎn)程目標(biāo)主機(jī)話單目錄 REMOTE_DATA_PATH=/backup_storage/bakcdr_ocs/DATA REMOTE_VOICE_PATH=/backup_storage/bakcdr_ocs/VOICE REMOTE_SMS_PATH=/backup_storage/bakcdr_ocs/SMS#判斷存放話單的目標(biāo)目錄是否存,不存在則創(chuàng)建目錄 Check_TargetMenu(){if [ ! -d $1 ] ; then mkdir -p $1echo $1 does not exists , create successfully >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1fi }#將每個(gè)話單的normal下的日期目錄 tar.gz TarCDRMenu2GZ(){if [ -d $1 ] ; then cd $1for dateMenu in `ls`doecho 目錄名稱 $dateMenu#判斷是否是目錄if [ -d $1/$dateMenu ] ; then#因凌晨作業(yè),當(dāng)天的話單不完整,當(dāng)天目錄不進(jìn)行壓縮操作.if [ $dateMenu -lt $CDR_TODAY ] ; then #按照特定格式壓縮gz if [[ $1 =~ "DATA" ]] ; then #tar.gztar -zcvf $CDR_HOST$DATA_FLAG$dateMenu.tar.gz $dateMenuTARED_GZ_FIEL=$CDR_HOST$DATA_FLAG$dateMenu.tar.gzelif [[ $1 =~ "VOICE" ]] ; then #tar.gztar -zcvf $CDR_HOST$VOICE_FLAG$dateMenu.tar.gz $dateMenuTARED_GZ_FIEL=$CDR_HOST$VOICE_FLAG$dateMenu.tar.gzelse #tar.gztar -zcvf $CDR_HOST$SMS_FLAG$dateMenu.tar.gz $dateMenuTARED_GZ_FIEL=$CDR_HOST$SMS_FLAG$dateMenu.tar.gzfi#判斷上個(gè)執(zhí)行結(jié)果是否成功,成功轉(zhuǎn)移目錄if [ $? == 0 ] ; then echo "$1/$dateMenu.tar.gz tared successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1#將GZ文件傳到$2mv $TARED_GZ_FIEL $2echo "$TARED_GZ_FIEL moved to $2 successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1#暫時(shí)不刪除rm $1/$dateMenu -rf TaredFileMenu=$1/$dateMenu#檢查目錄Check_TargetMenu $STORED_DIR_DATACheck_TargetMenu $STORED_DIR_VOICECheck_TargetMenu $STORED_DIR_SMS#處理文件 DealTaredFileMenu $TaredFileMenufi fi else echo -e "\033[31m ERROR $1/$dateMenu is not a directory \033[0m" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1fidoneelseecho -e "\033[31m ERROR $1 does not exist \033[0m" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1fi}#存放tared的目錄文件到對(duì)應(yīng)的目錄 DealTaredFileMenu(){if [[ $1 =~ "DATA" ]] ; then mv $1 $STORED_DIR_DATAecho "$1 moved to $STORED_DIR_DATA successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1elif [[ $1 =~ "VOICE" ]] ; then mv $1 $STORED_DIR_VOICEecho "$1 moved to $STORED_DIR_VOICE successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1else mv $1 $STORED_DIR_SMSecho "$1 moved to $STORED_DIR_SMS successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1fi }#傳遞話單 FtpFile(){echo FtpFile $1 >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1for file in `ls $1`do#判斷是否包含關(guān)鍵字,走不同的方法 (ftp中不識(shí)別包含命令,暫時(shí)沒提取到公共方法中)if [[ $1 =~ "DATA" ]] ; then PutDataFileByFtp $1 $fileecho "$1/$file put to remote server $HOST $REMOTE_DATA_PATH successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1elif [[ $1 =~ "VOICE" ]] ; then PutVoiceFileByFtp $1 $fileecho "$1/$file put to remote server $HOST $REMOTE_VOICE_PATH successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1else PutSmsFileByFtp $1 $fileecho "$1/$file put to remote server $HOST $REMOTE_SMS_PATH successfully " >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1fidone }#put 流量文件 PutDataFileByFtp(){ftp -i -n $HOST <<EOFquote USER $USERquote PASS $PASSWDcd $REMOTE_DATA_PATHput $1/$2 $2quit EOF }#put 語音文件 PutVoiceFileByFtp(){ftp -i -n -d $HOST <<EOFquote USER $USERquote PASS $PASSWDcd $REMOTE_VOICE_PATHput $1/$2 $2quit EOF }#put 短信文件 PutSmsFileByFtp(){ftp -i -n -d $HOST <<EOFquote USER $USERquote PASS $PASSWDcd $REMOTE_SMS_PATHput $1/$2 $2quit EOF }echo "==========================begin `date "+%Y-%m-%d %H:%M:%S"`===============================================" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1#處理流量話單文件 TarCDRMenu2GZ $DATA_NORMAL $DATA_GZ_FILE#處理語音話單文件 TarCDRMenu2GZ $VOICE_NORMAL $VOICE_GZ_FILE#處理短信話單文件 TarCDRMenu2GZ $SMS_NORMAL $SMS_GZ_FILE#傳遞DATA到遠(yuǎn)程目標(biāo)主機(jī) FtpFile $DATA_GZ_FILE #傳遞SMS到遠(yuǎn)程目標(biāo)主機(jī) FtpFile $SMS_GZ_FILE#傳遞VOICE到遠(yuǎn)程目標(biāo)主機(jī) FtpFile $VOICE_GZ_FILE#關(guān)于EOF的說明: #EOF 只是一個(gè)標(biāo)識(shí)而已,可以替換成任意的合法字符 #作為結(jié)尾的delimiter一定要頂格寫,前面不能有任何字符 #作為結(jié)尾的delimiter后面也不能有任何的字符(包括空格) #作為起始的delimiter前后的空格會(huì)被省略掉#結(jié)束時(shí)間 END_TIME=$(date +%s) echo "==========================end `date "+%Y-%m-%d %H:%M:%S"`=================================================" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1#計(jì)算腳本執(zhí)行時(shí)間#也可以 通過下面的方式統(tǒng)計(jì) time 腳本名稱 #....省略執(zhí)行過程 #real 0m2.024s #user 0m0.007s #sys 0m0.008s echo "==========================time consuming $(($END_TIME - $BEGIN_TIME)) seconds=================================================" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1#輸出一行空行到日志中,方便區(qū)分每次執(zhí)行的日志 echo "" >>$LOG_LOCATION/TarCdrAndTransfer.log 2>&1 exit $EXIT_SUCCESS
總結(jié)
以上是生活随笔為你收集整理的Shell-实际业务操作03的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell-实际业务操作02
- 下一篇: Maven-Maven中添加Oracle