Shell编程之循环语句,多层循环

一、for语句的结构

读取不同的变量值,用来逐个执行同一组命令

  • for  遍历循环

1)for 变量  in  取值列表
for i in  $(seq 1 10)
do
    命令序列
    ....
done


2)for ((变量=初始值; 变量范围; 变量的迭代方式))
for ((i=1; i<=10; i++))
do
    命令序列
    ....
done
  • IFS  for循环取值列表分隔符

set | grep IFS  -->  IFS=$' \t\n'    默认包含 空格、制表符、换行符

字符串分片  ${变量:下标:长度}     #下标从0开始
字符串长度  ${#变量}
随机数      $RANDOM         #0~32767
0到N-1之间的随机数    $[RANDOM % N] 
  • for循环实现多线程

for ((i=1; i<=10; i++))
do
  {
    命令序列
     ....
  }&          #将每次循环的进程都放入后台自行运行
done
wait          #等待上面所有循环的进程都执行完毕后再执行后面的命令
命令序列
  • 案例批量创建用户并设置统一密码
vim XXX.sh


#!/bin/bash
#批量添加用户,用户名存放在user.txt文件哄,每行一个,初始密码均设为123456

userfile=/root/user.txt

for name in$(cat userfile)
do
    useradd $name
    echo 123456 | passwd --stdin $name &> /dev/null
done

echo "..."
  • 案例禁用当前系统除了root用户以外的可登录用户
vim XXX.sh


#!/bin/bash
#禁用当前系统除了root用户以外的可登录用户

usrname=$(cat /etc/passwd | grep "/bn/bash$" | grep -v "^root" | awk -F: '{print $1}')

for iname in $usrname
do
    #echo $iname
    usermod -L $iname
done
  • 案例根据IP地址检查主机状态
vim XXX.sh


#!/bin/bash
#IP地址存放在ipadd.txt文件中,每行一个;使用ping命令检测各主机的连通性

filepath=/root/for/ipaddd.txt

for hostip in $(cat $filepath)
do
    ping -c 4 -i 0.5 -w 5 $hostip &> /dev/null
    if [ $? -eq 0 ]
        then echo "$hostip is online"
    else
        echo "$hostip is offline"
    fi
done
  • 案例用ping命令检测多个IP连通性
vim XXX.sh


#!/bin/bash
#根据IP地址检查主机状态 使用ping命令检测 192.168.80.10 20 30 40 50 60主机的连通性

for num in {1..6}(或10 20 30 40 50 60)
do
    hostip=192.168.80.${num}0(或192.168.80.$num)
    ping -c 4 -i 0.5 -w 2 $hostip &> /dev/null
        if [ $? -eq 0 ]
            then echo "$hostip is online"
        else
            echo "$hostip is offline"
        fi
done
  • 案例
vim XXX.sh


#!/bin/bash
#用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户存在;用户存在但没密码,则提示用户并让用户设置密码;若该用户不存在,提示用户输入密码,创建用户并设立其密码

二、while语句的结构

重复测试某个条件,只要条件成立则反复执行

三、until

until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比较少 

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值