语法结构:
for 变量 [ in取值列表 ]
do
循环体
done
eg:
自动循环创建用户
[root@master1 ~]# cat 11.sh #!/bin/bash for i in {1..10} do useradd $i echo "$i 创建成功" donefor i in $(seq 1 10) 、for i in `seq 10` 也可以。
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.16eg:
使用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语句结构(死循环,逐行处理文件)
while 条件测试
do
循环体
done
ps:当条件为真的时候执行循环
eg:
while : do let i++ sleep 1 //休息1秒再显示 echo $i doneeg:创建新用户,输入的密码长度不符合要求达到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 fiuntil 语法结构
until 条件测试
do
循环体
done
ps:当条件测试成立时(当条件为假视为成立)执行语句
#!/bin/bash until [ $i -eq 14 ] do i++ sleep 1 echo $i doneExpect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。
1、安装
yum -y install expect tcl tclx tcl-develeg:通过expect解决ssh交互wenti
#!/usr/bin/expect spawn ssh root@192.168.0.111 expect{ "yes/no" { sebd "yes\r";exp_continue } //exp_continue,跳过循环,就继续下一条语句。 "password:" { send "666666\r" }; } interact //允许用户交互