目录
1 for语句的结构
■ 读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表
do
命令序列
done
● 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令列,直到 变量值用完退出循环。“取值列表”称为for 语句的执行条件,其中包括多个属性相同的对象,需要预先指定
例:创建一个新用户列表,内容根据人事给定的姓名拼音来认定
[root@localhost~] # vim users. txt //用做测试的列表文件
chenye
dengchao
zhangjie
循环创建列表里这些用户,并给他们这些设定初始密码,密码为“123456”
[root@localhost~]# vim uaddfor. sh //批量添加用户的脚本
#!/bin/bash
ULIST=$(cat /root/users. txt)
for UNAME in $ULIST
do
if [ $uname == ` grep $uname /etc/passwd | awk -F: ’{print $1}’ ` ]
then echo "姓名重复"
fi
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &>/dev/null
done
[root@localhost~] # chmod +x uaddfor. sh
[root@localhost~] # . /uaddfor. sh //测试并确认执行结果
2 while语句的结构
■ 重复测试某个条件,只要条件成立则反复执行
while 条件测试操作
do
命令序列
done
● for循环语句非常适用于列表对象无规律,且列表来源已固定(如果个列表文件)的场合。而对于要求控制循环次 数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使用另外一种循环-while 语句。
例:若要添加20个用户,名称依次为stul、 stu2、… stu20
[root@localhost~ ]# vim uaddwhile. sh
#!/bin/bash
i=1
while [ $i -le 20 ] //控制循环条件
do //重复循环执行的操作
uname=" stu$i "
if [ $uname == `grep $uname /etc/ passwd | awk -F: ’{print $1}’ ` ]
then echo"姓名重复"
fi
useradd $uname
echo 123456 | passwd --stdin $uname &> /dev/null
let i++
done
[root@localhost~]# chmod +x uaddwhile. sh
[root@localhost~]# . /uaddwhile. sh
3 until语句的结构
■ 重复测试某个条件,只要条件不成立则反复执行
until 条件测试操作
do
命令序列
done
● until循环与while循环类似,while循环能实现的脚本until 同样也可以实现,但区别是while 循环在条件为真是继续执行循环,而until 则是在条件为假时执行循环。
例:计算从1到50的和,从1开始相加,采用循环的方式,每次循环后加1,将得到的值加入计算的和中数字运算采用的是let方式,直到加到50为止
[ root@localhost ]# vim sum1to50_until_ v1. sh
#!/bin/ bash
i=0
s=0
until [ $i -eq 50 ]
do
let " i=$i+1 " ; let " s=$s+$i "
done
echo’ sum(1..50)=’$s
[root@localhost~]# chmod +x sum1to50_until_vl.sh
[root@localhost~]# . / sumlto50_ until_ v1.sh
sum(1..50)=1275