批量修改密码脚本--------小练习

批量修改脚本练习

批量修改文件名脚本

需求:将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版权协议,转载请附上原文出处链接和本声明。