一、for循环
for 变量名 [ in 取值列表 ]
do
循环体
done
案例1: ping测试主机
案例2: 通过用户列表文件创建用户
案例3:使用for实现批量主机root密码的修改
首先得先进行对 ip.txt中的ip免密登录
二、while循环
- 特点
循环次数不[一定]是固定的、
while执行的返回值一定为真
三、until循环
until执行的返回值一定为假
案例1:每个一秒循环一个数字
案例2:每隔2秒查看sala用户是否登录,循环往复。如果该用户登录,请显示登录并退出监控程序并输出sala尚未登录
四、except
expect 是解决用户交互问题
- 安装:yum install -y expect tcl tclx tcl-devel
案例1:通过expect解决ssh交互问题
案例2:expect实战:公钥推送
- `#!/bin/bash
#创建一个IP地址文件。
ip.txt
#使用for循环ping测试主机是否在线。
for i in {2…254}
do
{
#学员请注意练习环境的IP地址,可能与示例中不同。
ip=192.168.65.$i
ping -c1 -W1 $ip &> /dev/null
if [ ? − e q 0 ] ; t h e n e c h o " ? -eq 0 ];then echo " ?−eq0];thenecho"ip" >> ip.txt
fi
}&
done
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#使用for循环ping测试主机是否在线。
for i in {2..254}
do
{
#学员请注意练习环境的IP地址,可能与示例中不同。
ip=192.168.65.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip" >> ip.txt
/usr/bin/expect <<-EOF
set timeout 10
spawn ssh-copy-id $ip
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "centos\r" }
}
expect eof
EOF
fi
}&
done
wait
echo "finishi..."
脚本优化
#!/bin/bash
#创建一个IP地址文件。
>ip.txt
#检测expect是否安装,检测公钥是否创建。
rpm -q expect &> /dev/null
if [ $? -ne 0 ] ;then
yum install -y expect
fi
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
#使用for循环ping测试主机是否在线。之前插入安装和准备秘钥。