Linux 脚本 主要是用来批量替换 IP 数据库密码
Linux 脚本 主要是用来批量替换 IP 数据库密码注意事项 特殊符号千万别用在这个脚本 比如 * 星号\ / 有些是注释 把注释符号替换掉就会出问题
如果一定要这么用 请自己先备份好尝试
使用方式 Replacement.sh 路劲 替换前 替换后 比如元文件里有个IP 是123.123.123.123
把脚本放到系统根目录
./Replacement.sh[有空格]/data[有空格]123.123.123.123[有空格]222.222.222.222
cd / && ./Replacement.sh /data 123.123.123.123 222.222.222.222
[*]#!/bin/bash
[*]#替换的文件夹目录 会自动查询子目录
[*]name_dir="$1"
[*]#替换前
[*]B="$2"
[*]#替换后
[*]A="$3"
[*]finddir="/tmp/i8520-98w7e9wqe_find-0806"
[*]rm -rf $finddir
[*]mkdir -p $finddir
[*]#为了得到带空格的文件路径 "" 加了双引号 保存到 finddirA.txt 文件 ,简单说列出所以文件路径保存到finddirA.txt
[*]#-name "*" 表示 路径下的所有文件
[*]find $name_dir -type f -name "*" | awk '{print """$0}' | awk '{print $0"""}' > $finddir/finddirA.txt
[*]if [ ! -s "$finddir/finddirA.txt" ];then
[*]echo -e "创建路径文件失败,请确认路径是否存在!!!"
[*]else
[*]echo -e "创建路径文件成功"
[*]fi
[*]sleep 1
[*]#把预设转换代码加到 文件路径前面 并保存 到 finddirA.sh 脚本 。简单说finddirA.txt转换成具体功能脚本finddirA.sh
[*]awk '{print "sed -i -r "s/$A/$B/g" "$0}'$finddir/finddirA.txt >$finddir/finddirA.sh
[*]chmod -R 750 $finddir/finddirA.sh
[*]#替换字符得到完美的执行脚本 这里不要改
[*]sed -i "s/\$A/$B/g" $finddir/finddirA.sh
[*]sed -i "s/\$B/$A/g" $finddir/finddirA.sh
[*]if [ ! -s "$finddir/finddirA.sh" ];then
[*]echo -e "创建替换脚本失败"
[*]else
[*]echo -e "创建替换脚本成功"
[*]fi
[*]sleep 1
[*]MYlist="${finddir}/grep_list.txt"
[*]grep -rEn "${B}" "${name_dir}"| grep -v "Binary file" > ${MYlist}
[*]#读取匹配文件有几行。几行就是几个
[*]list_123=$(cat ${MYlist} | wc -l)
[*]#----------------------------------------------------------------
[*]#不知到为什么会卡在这里所以判断一下直接推出
[*]abcdfe="========================================="
[*]list_BUG="0"
[*]if [ ! x${list_BUG} = x${list_123} ];then
[*] echo "${abcdfe}"
[*] else
[*] listBUG=$(cat $finddir/finddirA.txt | wc -l)
[*] echo -e "${abcdfe}\n替换失败!一共查询 ${listBUG} 个文件 替换前${B}不存在 脚本已经终止运行!";exit
[*]fi
[*]#----------------------------------------------------------------
[*]#获取匹配文件第一行 作为文件路径使用 来获取文件MD5
[*]list_abc=$(sed -n 1p ${MYlist})
[*]#${list_abc%%:*} 截取字符获得文件路径
[*]md5sum ${list_abc%%:*} > $finddir/md5sum_a.txt
[*]mymd5sum=`sed -n 1p $finddir/md5sum_a.txt`
[*]#执行替换脚本
[*]echo "正在执行替换脚本请稍候......"
[*]cd $finddir && ./finddirA.sh
[*]if [ ! $? == 0 ];then
[*] echo -e "\n执行替换脚本失败 !!!替换前字符 ${B} 不符合 sed 规范\
[*] 请查看 sed -h 帮助\n其他帮助:https://www.cnblogs.com/f-ck-need-u/p/7499309.html"
[*]else
[*] #验证前后MD5直判断是否替换成功 这里只验证一个文件,应为只要 sed 输入符合规范 finddirA.sh脚本都会执行
[*] find_p=`find $name_dir -type f -name "*" | awk '{print """$0}' | awk '{print $0"""}' | wc -l`
[*] mymd5sum_x=`md5sum ${list_abc%%:*} | sed -n 1p`
[*] if [ ! x${mymd5sum:0:32} = x${mymd5sum_x:0:32}] ;then
[*] echo "替换成功!一共查询 ${find_p} 个文件。匹配到 ${list_123} 个文件"
[*] else
[*] echo "ERR"
[*] fi
[*]fi
[*]
[*]sleep 1
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]