一、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 时才循环,实际使用中比较少