循环语句的结构以及语法
■For循环语句
FOR循环是一直去取值,取完为止才会结束
For语句应用示例
示例1
●批量添加用户
首先去目录下创建一个用户名池提供使用
用户名存放在users.txt文件中,每行一个
[root@localhost ~]# cd /opt/xh/
[root@localhost xh]# vi user.txt
tom
jack
tang
susam
创建for循环脚本
[root@localhost xh]# vi for1.sh
#!/bin/bash
U=$(cat /opt/xh/user.txt)
for i in $U 相当于去/opt/xh/user.txt里去拿
do
useradd $i
echo "创建用户$i"
echo "123456" | passwd --stdin $i &> /dev/null ◆初始密码均设为123456
done
◆验证脚本
[root@localhost xh]# chmod +x for1.sh 给执行权限
[root@localhost xh]# ./for1.sh 执行脚本
创建用户tom
创建用户jack
创建用户tang
创建用户susam
[root@localhost xh]# tail -4 /etc/passwd
tom:x:1001:1001::/home/tom:/bin/bash
jack:x:1002:1002::/home/jack:/bin/bash
tang:x:1003:1003::/home/tang:/bin/bash
susam:x:1004:1004::/home/susam:/bin/bash
可以看到我们创建成功了
[root@localhost xh]# su - tom 然后我们切换账户试试密码是不是123456
注:root账户切换任何账户不需要输密码,
所以我们需要先切换到其他账户
[tom@localhost ~]$ su - jack
Password: 这里输入密码123456
[jack@localhost ~]$ 可以看到登录jack成功了
■WHILE循环语句
重复测试某个条件,只要条件成立则反复执行
While语句应用示例
示例
●批量添加用户
◆用户名称以stu开头,按数字顺序进行编号
◆—共添加20个用户,即stu1、stu2、.......、stu20
初始密码均设为123456
[root@localhost xh]# vi while.sh
#!/bin/bash
P="stu"
#i初始值为1
i=1
while [ $i -le 20 ]
do
#当两个变量在一起组合时,需要将其中一个变量用{}括起来,防止混乱
useradd ${P}$i
echo "创建${P}$i账户成功"
echo "123456" | passwd --stdin ${P}$i &>/dev/null
let i++ 每循环一次 i+1
done
执行脚本验证
[root@localhost xh]# chmod +x while.sh
[root@localhost xh]# ./while.sh
创建stu1账户成功
创建stu2账户成功
创建stu3账户成功
创建stu4账户成功
创建stu5账户成功
创建stu6账户成功
创建stu7账户成功
创建stu8账户成功
创建stu9账户成功
创建stu10账户成功
创建stu11账户成功
创建stu12账户成功
创建stu13账户成功
创建stu14账户成功
创建stu15账户成功
创建stu16账户成功
创建stu17账户成功
创建stu18账户成功
创建stu19账户成功
创建stu20账户成功
[root@localhost xh]# tail -5 /etc/passwd 查看passwd文件最后5行
stu16:x:1020:1020::/home/stu16:/bin/bash
stu17:x:1021:1021::/home/stu17:/bin/bash
stu18:x:1022:1022::/home/stu18:/bin/bash
stu19:x:1023:1023::/home/stu19:/bin/bash
stu20:x:1024:1024::/home/stu20:/bin/bash
■until循环语句
Until语句应用示例
因为是条件不成立反复执行,所以当$i不等于20时,一直执行到条件满足为止
[root@localhost xh]# vi until.sh
i=0
until [ $i -eq 20 ] 【要求i的值等于20,初始值为1】
do
echo "$i" 打印当前的i值
let i++ 每执行一次i+1
done
验证
[root@localhost xh]# ./until.sh
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
我们可以看到从0到19执行了二十次
当21次i=20时,条件满足自动退出,所以并没有20