批量修改脚本练习
批量修改文件名脚本
需求:将test目录下所有以.txt结尾的文件名字修改成.log结尾
mkdir /test
touch {1..8}.txt
touch {1..5}.jpg
touch {1..4}.mp2
1. 切换到test目录
cd /test
2. 打开目录,查看目录下的内容
ls *.txt
3. 遍历出.txt文件结尾的文件
for name in `ls *.txt`
4. 将.txt结尾的文件名部分进行切割,切割出文件名
head_name=`ls *.txt | cut -d. -f1`
5. 将切割出来的文件名与.log进行拼接覆盖原文件名字
mv $i $head_name.log
vim test.sh
cd /test
for name in `ls *.txt`
do
head_name=`echo $name | cut -d .-f1'
mv $name $head_name.log
done
./test.sh 执行脚本
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6d542c4e75934dceb81bee295099f26f.png)
远程修改单台机器的密码(非交互)
[root@yum01 ~]
修改单台机器密码的脚本
while read line
do
user="root"
old_pass="111"
new_pass="123"
ip=192.168.100.50
cmd="echo $new_pass | passwd root --stdin"
expect << EOF
spawn ssh $user@$ip $cmd
expect {
"yes/no" {send "yes\r";exp_continue}
"*assword" {send "$old_pass\n"}
}
expect eof
EOF
done < host.txt
批量修改密码脚本
[root@yum01 scripts]
root:111:123:192.168.100.40
egon:xxx:yyy:192.168.100.50
tom:222:333:192.168.100.60
[root@yum01 scripts]
root:111:123:192.168.100.40
egon:xxx:yyy:192.168.100.50
tom:222:333:192.168.100.60
while read line
do
user=`echo $line | awk -F: '{print $1}'`
old_pass="`echo $line | awk -F: '{print $2}'`
new_pass=`echo $line | awk -F: '{print $3}'`
ip=`echo $line | awk -F: '{print $4}'`
cmd="echo $new_pass | passwd root --stdin"
expect << EOF
spawn ssh $user@$ip $cmd
expect {
"yes/no" {send "yes\r";exp_continue}
"*assword" {send "$old_pass\n"}
}
expect eof
EOF
done < host.txt
批量执行命令脚本
- 参考上一个脚本,我们只需要对脚本的一些变量稍加改动,就可以让多个服务器同时执行一条命令。
read -p "请输入您想要批量执行的命令: " cmd
while read line
do
user=`echo $line | awk -F: '{print $1}'`
pass=`echo $line | awk -F: '{print $2}'`
ip=`echo $line | awk -F: '{print $3}'`
expect << EOF
spawn ssh $user@$ip $cmd
expect {
"yes/no" {send "yes\r";exp_continue}
"*assword" {send "$pass\n"}
}
expect eof
EOF
done < host1.txt
./host1.txt 执行脚本
切换其他虚拟机查看hostname文件内容,命令执行成功