知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

全局替换由crontab起的shell脚本中的某些字符串

发布时间:2014-09-05 15:22:40作者:知识屋


全局替换由crontab起的shell脚本中的某些字符串
 
遇到这样一个需求:
  www.zhishiwu.com  
需要替换crontab起的shell脚本中的某个域名,但是不知道crontab中
到底有多少的shell脚本包含被替换的域名,难道要手工去查找么?
于是写了个脚本,并通用之.
 
功能:替换crontab中的shell脚本的某个字符串为另外一个,用法:
 
Usage  : sh replaceCronScript.sh src="string1" dst="string2"
Example: sh replaceCronScript.sh src=clicklog.dtc.log.sz.com dst=soso1_0.dtc.log.sz.com
  www.zhishiwu.com  
001
#! /bin/bash
002
 
003
#####################################################
004
#name           : replaceCronScript.sh 
005
#note           : replace some crontab shell scripts's
006
#               : string with new string
007
#date           : 2012.12.27
008
#author         : <peterguo@vip.qq.com>
009
####################################################
010
 
011
 
012
if [ $# -eq 0 ];
013
then
014
    echo "Usage  : sh $(basename $0) src=/"string1/" dst=/"string2/""
015
    echo "Example: sh $(basename $0) src=clicklog.dtc.log.sz.com dst=soso1_0.dtc.log.sz.com"
016
    exit 1
017
fi
018
 
019
InnerIP=$(/sbin/ifconfig eth1 | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2}' | cut -c 6-)
020
CurFullScript=$(readlink /proc/$$/fd/255)
021
CurScriptPath=$(dirname $CurFullScript)
022
CurScriptName=$(basename $CurFullScript)
023
FullParam=$*
024
CurPid=$$
025
 
026
#Reslove the param, format name=value -> $name
027
eval $*
028
 
029
function colorEcho(){
030
    [ $# -eq 0 ] && echo "colorEcho Usage: colorEcho [red|green|yellow|blue|pink|dark|bright|cyan] sentence"
031
    [ $# -eq 0 ] && return 1
032
    colorFmtTail='/033[m'
033
    brightFmtHead='/033[1;29m'
034
    darkFmtHead='/033[1;30m'
035
    redFmtHead='/033[1;31m'
036
    greenFmtHead='/033[1;32m'
037
    yellowFmtHead='/033[1;33m'
038
    blueFmtHead='/033[1;34m'
039
    pinkFmtHead='/033[1;35m'
040
    cyanFmtHead='/033[1;36m'
041
 
042
    case $1 in
043
    "red")
044
        echo -e ${redFmtHead}${2}${colorFmtTail}
045
        ;;
046
    "green")
047
        echo -e ${greenFmtHead}${2}${colorFmtTail}
048
        ;;
049
    "yellow")
050
        echo -e ${yellowFmtHead}${2}${colorFmtTail}
051
        ;;
052
    "blue")
053
        echo -e ${blueFmtHead}${2}${colorFmtTail}
054
        ;;
055
    "pink")
056
        echo -e ${pinkFmtHead}${2}${colorFmtTail}
057
        ;;
058
    "dark")
059
        echo -e ${darkFmtHead}${2}${colorFmtTail}
060
        ;;       
061
    "bright")
062
        echo -e ${brightFmtHead}${2}${colorFmtTail}
063
        ;; 
064
    "cyan")
065
        echo -e ${cyanFmtHead}${2}${colorFmtTail}
066
        ;;         
067
    *)
068
        echo ${2}
069
    esac 
070
}
071
 
072
#Display the Current Environment Values
073
echo "[$CurPid][$CurScriptPath][$CurScriptName][$FullParam]"
074
#************************* main ****************************#
075
total=0
076
for file in $(crontab -l | grep "sh " | awk '{for(i=1;i<=NF;i++) print $i}' | grep ".sh$" | sed "s/;.//g")
077
do
078
    GrepRst=$(grep /"$src/" $file 2>/dev/null)
079
    [[ $? -eq 0 ]] && {
080
        echo $file
081
        total=$((total + 1))
082
    }
083
done
084
 
085
colorEcho yellow ">>>>>>>>>>>>>> Start to Confirm Total[$total]......../n"
086
 
087
process_files=""
088
for file in $(crontab -l | grep "sh " | awk '{for(i=1;i<=NF;i++) print $i}' | grep ".sh$" | sed "s/;.//g")
089
do
090
    GrepRst=$(grep /"$src/" $file 2>/dev/null)
091
    if [ $? -eq 0 ];
092
    then
093
        echo -e "/n/n"
094
        echo Found in $file
095
        colorEcho bright "****************************************** begin ************************************************************"
096
        echo $GrepRst
097
        colorEcho bright "******************************************* end  ************************************************************"
098
        colorEcho red "Replace[Enter] NoReplace[N|n]"
099
        read strConfirm
100
        if [ "${strConfirm}" == "N" ] || [ "${strConfirm}" == "n" ]
101
        then
102
            colorEcho green "Skipping file $file"
103
        else
104
            colorEcho green "sed -i /"s/$src/$dst/g/" $file"
105
            sed -i "s/$src/$dst/g" $file
106
            [[ $? -ne 0 ]] && {
107
                colorEcho red "Error with $file"
108
                exit 1
109
            }
110
            process_files="$process_files   /n$file"
111
        fi
112
    fi
113
done
114
 
115
colorEcho green "/nProcessed files as following ......."
116
echo -e $process_files
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜