shell练习——流程控制之循环

题目

一、for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。

二、for循环ping测试指定网段的主机,网段由用户输入。

三、使用for/while实现批量主机root密码的修改


一、for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。

例如:test01,test10

1、编写脚本

[root@client_2 homework4]# vim add20user.sh
#!/bin/bash
read -p "please input username's prefix:" namepre
read -p "please input initial password:" passwd
count=20
for name in ${namepre}{01..20}
do
	useradd $name &> /dev/null
	if [ $? -eq 0 ];then
		echo $passwd | passwd $name --stdin &> /dev/null
	else
		echo "user $name already exists."
		let count--
	fi
done
echo "created $count users successfully"

2、加可执行权限

[root@client_2 homework4]# chmod a+rx add20user.sh

3、测试

二、for循环ping测试指定网段的主机,网段由用户输入。

例如用户输入192.168.5 ,则ping 192.168.5.1 --- 192.168.5.10,并将结果保存到文件中。
UP: /tmp/host_up.txt
Down: /tmp/host_down.txt

1、创建记录文件

[root@client_2 homework4]# touch /tmp/host_up.txt
[root@client_2 homework4]# touch /tmp/host_down.txt

2、编写脚本

[root@client_2 homework4]# vim forPing.sh 
#!/bin/bash
read -p "please input network segment:" seg
for ip in ${seg}.{1..10}
do
	if ping -c2 $ip &> /dev/null ;then
		date >> /tmp/host_up.txt
		echo "$ip is up" >> /tmp/host_up.txt
	else
		date >> /tmp/host_down.txt
		echo "$ip is down" >> /tmp/host_down.txt
	fi
done

3、加可执行权限

[root@client_2 homework4]# chmod a+rx forPing.sh

4、测试

三、使用for/while实现批量主机root密码的修改

成功或失败都必须记录保存
提示:主机IP存放在一个文件中
SSH:实现公钥认证,执行远程中主机命令
实现公钥认证
# ssh-keygen 在用于管理的主机上生成密钥对
# ssh-copy-id -i 192.168.2.3

1、创建主机IP文件

[root@client_2 homework4]# vim host_ip.txt
192.168.5.128
192.168.5.129
192.168.5.131

2、编写脚本

for循环:

[root@client_2 homework4]# vim chpwd_ssh.sh 
#!/bin/bash
host_ip="/root/shell/homework4/host_ip.txt"
chpwd_log="/root/shell/homework4/chpwd_log.txt"
echo "checking key pair..."
if [ -f /root/.ssh/id_rsa -a -f /root/.ssh/id_rsa.pub ];then
	echo "key pair is ok"
else
	ssh-keygen -q -P "" -f /root/.ssh/id_rsa &> /dev/null && echo "key pair is created successfully"
fi
read -p "please input new password for hosts:" passwd
for line in `cat "$host_ip"`
do
	echo "changing $line's root password..."
	ssh-copy-id root@$line &> /dev/null && ssh root@$line "echo $passwd | passwd root --stdin" &> /dev/null
	if [ $? -eq 0 ];then
		echo "$line change password successfully"
		date >> "$chpwd_log"
		echo "$line change password successfully" >> "$chpwd_log"
	else
		echo "$line change password failed"
		date >> "$chpwd_log"
        echo "$line change password failed" >> "$chpwd_log"
	fi
done

while循环:

[root@client_2 homework4]# vim chpwd_ssh.sh 
#!/bin/bash
host_ip="/root/shell/homework4/host_ip.txt"
chpwd_log="/root/shell/homework4/chpwd_log.txt"
echo "checking key pair..."
if [ -f /root/.ssh/id_rsa -a -f /root/.ssh/id_rsa.pub ];then
	echo "key pair is ok"
else
	ssh-keygen -q -P "" -f /root/.ssh/id_rsa &> /dev/null && echo "key pair is created successfully"
fi
read -p "please input new password for hosts:" passwd
exec < "$host_ip"
while read line
do
	echo "changing $line's root password..."
	ssh-copy-id root@$line &> /dev/null && ssh -n root@$line "echo $passwd | passwd root --stdin" &> /dev/null
	if [ $? -eq 0 ];then
		echo "$line change password successfully"
		date >> "$chpwd_log"
		echo "$line change password successfully" >> "$chpwd_log"
	else
		echo "$line change password failed"
		date >> "$chpwd_log"
        echo "$line change password failed" >> "$chpwd_log"
	fi
done

注意:while循环读取文件是从文件中每读入一行执行一次循环,ssh -n是为了防止ssh命令执行后文件数据读入到对端主机而造成程序终止循环。ssh -n等价于ssh < /dev/null

3、测试

关闭192.168.5.128主机以模拟失败

没有配置免密的第一次尝试修改密码:

第二次修改密码(免密):

查看日志:

over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俗人不俗鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值