一、for
语法结构:
eg:
自动循环创建用户
[root@master1 ~]# cat 11.sh
#!/bin/bash
for i in {1..10}
do
useradd $i
echo "$i 创建成功"
done
eg:
通过循环工具,探测全网主机,将在线的主机
[root@master1 ~]# vim 22.sh
#!/bin/bash
#ping
for i in {1..20}
do
ip=10.8.162.$i
ping -c1 -W1 $ip &> /dev/null
if [ $? -eq 0 ] ; then
echo $ip >> up.txt
else
echo $ip >> down.txt
fi
done
~
~
~
"22.sh" 12L, 166C 8,4 全部
ping ip执行的结果:
[root@master1 ~]# cat down.txt
10.8.162.1
10.8.162.2
10.8.162.4
10.8.162.5
10.8.162.8
10.8.162.9
10.8.162.11
10.8.162.12
10.8.162.13
10.8.162.14
10.8.162.17
10.8.162.18
10.8.162.19
10.8.162.20
[root@master1 ~]# cat up.txt
10.8.162.3
10.8.162.6
10.8.162.7
10.8.162.10
10.8.162.15
10.8.162.16
eg:
使用for循环批量修改主机的密码
首先要做免密登录 ssh-keygen 、ssh-copy-id IP地址
做一个txt文档,将做的免密登录的ip地址记录下来,方便调用。
[root@master1 ~]# vim forpass.sh
#!/bin/bash
read -p "请输入修改的密码: " pass
for i in ` cat passwd.txt `
do
ping -c1 -w1 $i &> /dev/null
if [ $? -eq 0 ] ; then
ssh $i " echo $pass | passwd --stdin root"
echo "$i" >> yespass.txt
else
echo "$1" >> nopass.txt
fi
done
"forpass.sh" 12L, 277C 11,3 全部
[root@master1 ~]# bash forpass.sh
请输入修改的密码: 777777
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。
二、while until
特点:循环次数不(一定是固定的)
ps:当条件为真的时候执行循环
eg:
while :
do
let i++
sleep 1 //休息1秒再显示
echo $i
done
eg:创建新用户,输入的密码长度不符合要求达到3次后就直接退出程序。
[root@master1 ~]# vim user.sh
#!/bin/bash
i=1 //首先要对变量赋值
read -p "请输入你想创建的用户名字:" name
if id $name &> null
then
echo "用户已存在,请重新创建名字"
else
while [ $i -lt 4 ] //while循环
do
let i++
read -p "请设置密码:" passwd
if [ ${#passwd} -lt 7 ] //${#passwd} 记录变量passwd字符的位数
then
echo "输入的密码不符合要求"
else
useradd $name
echo $passwd | passwd --stdin $name &> /dev/null
echo " 用户 $name 创建成功,密码为 $passwd"
exit 1
fi
done
fi
ps:当条件测试成立时(当条件为假视为成立)执行语句
#!/bin/bash
until [ $i -eq 14 ]
do
i++
sleep 1
echo $i
done
三、expect
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
1、安装
yum -y install expect tcl tclx tcl-devel
eg:通过expect解决ssh交互wenti
#!/usr/bin/expect
spawn ssh [email protected]
expect{
"yes/no" { sebd "yes\r";exp_continue } //exp_continue,跳过循环,就继续下一条语句。
"password:" { send "666666\r" };
}
interact //允许用户交互