一、for 循环
1.用法和特点
for 变量 in 取值列表 -- 默认取值分割符(空格、制表符、换行符)
do 或 {
命令序列
done 或 }
2.执行指定次数
取值列表(指定取值)
[root@localhost1 ~]#vim test4.sh
#!/bin/bash
for i in 1 2 3 4
do
echo $i
done
[root@localhost1 ~]#bash test4.sh
1
2
3
4
3.遍历和迭代
迭代和遍历实现的方式不同,但都可以实现循环执行指定范围的所有值
(1)遍历
[root@localhost1 ~]#vim test5.sh
#!/bin/bash
for i in {1..4} -- 方式1
do
echo $i
done
echo "-------------"
for i in $(seq 1 4) -- 方式2
do
echo $i
done
[root@localhost1 ~]#bash test5.sh
1
2
3
4
------------- 遍历执行效果相同
1
2
3
4
指定步长(两种方法位置不一样,用n表示)
//指定步长,如步长为2可以实现奇偶数
[root@localhost1 ~]#vim test6.sh
#!/bin/bash
for i in {1..10..2} --起始为奇数
do
echo $i
done
echo "-------------"
for i in $(seq 2 2 10) --起始为偶数
do
echo $i
done
[root@localhost1 ~]#bash test6.sh
1
3
5
7
9
-------------
2
4
6
8
10
(2)迭代
[root@localhost1 ~]#vim test7.sh
#!/bin/bash
for ((i=1;i<=10;i++))
do
echo $i
done
[root@localhost1 ~]#bash test7.sh
1
2
3
4
5
6
7
8
9
10
4.实例
//批量创建用户并修改密码
[root@localhost1 data]#vim adduser.sh
#!/bin/bash
for user in {1..10}
do
useradd user${user}
echo "123456" | passwd --stdin user${user}
done
[root@localhost1 data]#bash adduser.sh
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user4 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user5 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user6 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user7 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user8 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user9 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 user10 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost1 data]#tail /etc/passwd
user1:x:1002:1002::/home/user1:/bin/bash
user2:x:1003:1003::/home/user2:/bin/bash
user3:x:1004:1004::/home/user3:/bin/bash
user4:x:1005:1005::/home/user4:/bin/bash
user5:x:1006:1006::/home/user5:/bin/bash
user6:x:1007:1007::/home/user6:/bin/bash
user7:x:1008:1008::/home/user7:/bin/bash
user8:x:1009:1009::/home/user8:/bin/bash
user9:x:1010:1010::/home/user9:/bin/bash
user10:x:1011:1011::/home/user10:/bin/bash
二、 while 循环
1.用法和特点
while 条件表达式
do
命令序列
done
2.操作实例
//百米赛跑,速率为10m/s
[root@localhost1 data]#vim whiletest.sh
#!/bin/bash
i=0
rate=10
s=0
while [ $i -lt 100 ]
do
let i+=$rate
let s++
done
echo "您一共用了$s秒!"
//一共用了10s
[root@localhost1 data]#bash whiletest.sh
您一共用了10秒!
#求1-100的累加值
vim leijia.sh
sum=0
for i in {1..100}
do
sum=$(($i+$sum))
done
echo"1-100的累加值为$sum"
# 99乘法表
for i in {1..9}
do
echo -ne "$i*$j=$(($i+$j))"\t
done
echo
done
三、until 循环
1.用法和特点
until 条件表达式
do
命令序列
done
2.操作实例
//使用until循环实现数字累加
[root@localhost1 data]#vim sum.sh
#!/bin/bash
sum=0
i=1
until [ $i -gt 100 ] --当i不大于100使会一直执行
do
sum=$[sum + i] --将每次执行后的i累加到sum
let i++ --每次执行后i自加
done
echo $sum
[root@localhost1 data]#bash sum.sh
5050
四、循环控制语句
1、continue
继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环。即continue是跳过当次
子循环中剩下的语句,执行下一次循环。
[root@kang mytext]# vim untilxx.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
if [ $i -eq 3 ];then
continue #结果是1245,3不输出,跳出后面的echo语句执行下一次循环
else
echo $i
fi
done
[root@kang mytext]# bash untilxx.sh
1
2
4
5
2、break
打断,马上停止本次循环,执行循环体外的代码
[root@kang mytext]# vim untilxx.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
if [ $i -eq 3 ];then
break #结果是12,3以后都不输出,终止本次循环
else
echo $i
fi
done
[root@kang mytext]# bash untilxx.sh
1
2
3、exit
直接跳出程序,后面可跟状态返回码如exit 1等等。
[root@kang mytext]# vim untilxx.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
if [ $i -eq 3 ];then
exit 122 #结果是12,exit直接跳出程序,并返回返回码
else
echo $i
fi
done
[root@kang mytext]# echo $?
0
[root@kang mytext]# bash untilxx.sh
1
2
[root@kang mytext]# echo $?
122