Shell编程--循环

for循环

语法

for    变量名      [ in 取值列表 ]
do
循环体
done

案例1

需求:自动循环创建10个用户

#!/bin/bash
for i in {1..10}
do
    unseradd $i
done



for i in $(seq 1 10)
do
    unseradd $i
done

for i in `seq 10`
do
    unseradd $i
done


案例2

通过循环工具,探测全网主机。将在线主机记录在文本中。

#!/bin/bash
>ip.txt
for i in {2..254}
do
{
    ip=192.168.30.$i
    ping -c -W $ip $> /dev/null
    if [ $? -eq 0 ];then
        echo "$ip" | tee -a ip.txt
    fi
}&
done
wait
echo "finish"
            
#在do,done之间加入大括号,&,是加速for循环

案例3

通过用户列表文件创建用户

[root@localhost  scripts]# cat user.txt 
qianqian
qianfeng
fengfeng



#!/bin/bash
for user in `cat user.txt`
do
    useradd $user
    echo "$user is created"
done

案例4

使用for实现批量主机root密码的修改

前提1: 已经完成秘钥登录配置(ssh-keygen)

前提2:定义主机地址列表

前提3:并了解远程修改密码的方法

#!/bin/bash
#邀请用户输入新密码
read -p "请用户输入新密码: "  password
#循环调用IP地址
for i in $(cat ip.txt)
do
{
#测试IP是否在线
ping -c1 -W1 $i &> /dev/null
#在线IP进行修改
if [ $? -eq 0 ] ;then
#修改密码
        ssh  $i  "echo $password | passwd --stdin root"
#修改成功与否并记录
        if  [ $? -eq 0    ] ;then
                echo "$i" >>  ok.txt
        else
                echo $i  >> fail.txt
        fi
#不在线的主机记录。
else
        echo $i >> meigai.txt
fi
} &
done

while until

语法

特点:循环次数不一定是固定的

while 条件测试
do
循环体
done
==当条件测试成立(条件测试为真),执行循环体

案例1

每秒显示一个数字,一次递增+1

while :
do
    let i++
    sleep 1
    echo $i
done

until语法结构

until语法结构
until 条件测试
do
循环体
done
==当条件测试成立(条件测试为假视为成立),执行循环体

案例2

需求:每个一秒循环一个数字

#!/bin/bash
until  [[ $i -eq 14 ]]
do
    let i++
    sleep 1
    echo $i
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值