批量修改脚本练习
批量修改文件名脚本
需求:将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
# !/bin/bash
cd /test
for name in `ls *.txt`
do
head_name=`echo $name | cut -d .-f1'
mv $name $head_name.log
done
./test.sh 执行脚本

远程修改单台机器的密码(非交互)
#一行
[root@yum01 ~]# ssh root@远程主机ip "echo 123 | passwd root --stdin"
修改单台机器密码的脚本
# 修改单台机器的密码
#!/bin/bash
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]# cat host.txt
#批量修改密码
root:111:123:192.168.100.40
egon:xxx:yyy:192.168.100.50
tom:222:333:192.168.100.60 #用户名:原密码:新密码:用户ip
[root@yum01 scripts]# while read line;do echo $line ;done < host.txt
#批量修改密码
root:111:123:192.168.100.40
egon:xxx:yyy:192.168.100.50
tom:222:333:192.168.100.60 #用户名:原密码:新密码:用户ip
#!/bin/bash
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
批量执行命令脚本
- 参考上一个脚本,我们只需要对脚本的一些变量稍加改动,就可以让多个服务器同时执行一条命令。
# 批量执行命令
#!/bin/bash
read -p "请输入您想要批量执行的命令: " cmd # echo '1.1.1.1 www.baidu.com' >> /etc/hosts
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文件内容,命令执行成功
版权声明:本文为yangenguang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。