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
好东西路过帮顶 感谢大佬分享 Linux 脚本 主要是用来批量替换 IP 数据库密码 好东西,收下了!
页:
[1]