目录
读取不同的变量值,用来逐个执行同一组命令
for循环经常使用在已经知道要进行多少次循环的场景
for 变量 in 取值列表 -- 默认取值分割符(空格、制表符、换行符)
do 或 {
命令序列
done 或 }
取值列表(指定取值)
for value in 1 2 3 4 5 //每个取值用空格分开
do
命令序列
done
- [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
迭代和遍历实现的方式不同,但都可以实现循环执行指定范围的所有值
for value in {1.. 10}
do
命令序列
done
for value in $(seq 1 10)
do
命令序列
done
- [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表示)
for value in {1.. 10..n}
do
命令序列
done
for value in $(seq 1 n 10)
do
命令序列
done
- //指定步长,如步长为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
for ((i=1;i<=10;i++))
do
命令序列
done
//类似c语言的迭代方式,第一个字段定义变量并赋给初始值;第二个字段指定循环范围条件;第三个字段指定迭代规则(类似步长)
- [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
- //批量创建用户并修改密码
- [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循环常在不知道范围的时候使用
基于这个特点 无限循环可以使用 while true
while 条件表达式
do
命令序列
done
- //百米赛跑,速率为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秒!
重复测试某个条件,只要条件不成立则反复执行
until 条件表达式
do
命令序列
done
- //使用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