当前位置:   article > 正文

Shell编程循环语句(for、while、until)_shell 遍历

shell 遍历

目录

一、for 循环

1.用法和特点

2.执行指定次数

3.遍历和迭代

(1)遍历

(2)迭代 

4.操作实例

二、 while 循环

1.用法和特点

2.操作实例

三、until 循环

1.用法和特点

2.操作实例 


一、for 循环

1.用法和特点

读取不同的变量值,用来逐个执行同一组命令

for循环经常使用在已经知道要进行多少次循环的场景

for 变量 in 取值列表    -- 默认取值分割符(空格、制表符、换行符)

do 或 {

    命令序列              

done 或 }

2.执行指定次数

取值列表(指定取值)

for value in 1 2 3 4 5    //每个取值用空格分开

do

    命令序列              

done

  1. [root@localhost1 ~]#vim test4.sh
  2. #!/bin/bash
  3. for i in 1 2 3 4
  4. do
  5. echo $i
  6. done
  7. [root@localhost1 ~]#bash test4.sh
  8. 1
  9. 2
  10. 3
  11. 4

3.遍历和迭代

迭代和遍历实现的方式不同,但都可以实现循环执行指定范围的所有值

(1)遍历

for value in {1.. 10}

do

    命令序列              

done

for value in $(seq 1 10)

do

    命令序列              

done

  1. [root@localhost1 ~]#vim test5.sh
  2. #!/bin/bash
  3. for i in {1..4} -- 方式1
  4. do
  5. echo $i
  6. done
  7. echo "-------------"
  8. for i in $(seq 1 4) -- 方式2
  9. do
  10. echo $i
  11. done
  12. [root@localhost1 ~]#bash test5.sh
  13. 1
  14. 2
  15. 3
  16. 4
  17. ------------- 遍历执行效果相同
  18. 1
  19. 2
  20. 3
  21. 4

指定步长(两种方法位置不一样,用n表示) 

for value in {1.. 10..n}

do

    命令序列              

done

for value in $(seq 1 n 10)

do

    命令序列              

done

  1. //指定步长,如步长为2可以实现奇偶数
  2. [root@localhost1 ~]#vim test6.sh
  3. #!/bin/bash
  4. for i in {1..10..2} --起始为奇数
  5. do
  6. echo $i
  7. done
  8. echo "-------------"
  9. for i in $(seq 2 2 10) --起始为偶数
  10. do
  11. echo $i
  12. done
  13. [root@localhost1 ~]#bash test6.sh
  14. 1
  15. 3
  16. 5
  17. 7
  18. 9
  19. -------------
  20. 2
  21. 4
  22. 6
  23. 8
  24. 10

(2)迭代 

for ((i=1;i<=10;i++))

do

    命令序列              

done

//类似c语言的迭代方式,第一个字段定义变量并赋给初始值;第二个字段指定循环范围条件;第三个字段指定迭代规则(类似步长)

  1. [root@localhost1 ~]#vim test7.sh
  2. #!/bin/bash
  3. for ((i=1;i<=10;i++))
  4. do
  5. echo $i
  6. done
  7. [root@localhost1 ~]#bash test7.sh
  8. 1
  9. 2
  10. 3
  11. 4
  12. 5
  13. 6
  14. 7
  15. 8
  16. 9
  17. 10

4.操作实例

  1. //批量创建用户并修改密码
  2. [root@localhost1 data]#vim adduser.sh
  3. #!/bin/bash
  4. for user in {1..10}
  5. do
  6. useradd user${user}
  7. echo "123456" | passwd --stdin user${user}
  8. done
  9. [root@localhost1 data]#bash adduser.sh
  10. 更改用户 user1 的密码 。
  11. passwd:所有的身份验证令牌已经成功更新。
  12. 更改用户 user2 的密码 。
  13. passwd:所有的身份验证令牌已经成功更新。
  14. 更改用户 user3 的密码 。
  15. passwd:所有的身份验证令牌已经成功更新。
  16. 更改用户 user4 的密码 。
  17. passwd:所有的身份验证令牌已经成功更新。
  18. 更改用户 user5 的密码 。
  19. passwd:所有的身份验证令牌已经成功更新。
  20. 更改用户 user6 的密码 。
  21. passwd:所有的身份验证令牌已经成功更新。
  22. 更改用户 user7 的密码 。
  23. passwd:所有的身份验证令牌已经成功更新。
  24. 更改用户 user8 的密码 。
  25. passwd:所有的身份验证令牌已经成功更新。
  26. 更改用户 user9 的密码 。
  27. passwd:所有的身份验证令牌已经成功更新。
  28. 更改用户 user10 的密码 。
  29. passwd:所有的身份验证令牌已经成功更新。
  30. [root@localhost1 data]#tail /etc/passwd
  31. user1:x:1002:1002::/home/user1:/bin/bash
  32. user2:x:1003:1003::/home/user2:/bin/bash
  33. user3:x:1004:1004::/home/user3:/bin/bash
  34. user4:x:1005:1005::/home/user4:/bin/bash
  35. user5:x:1006:1006::/home/user5:/bin/bash
  36. user6:x:1007:1007::/home/user6:/bin/bash
  37. user7:x:1008:1008::/home/user7:/bin/bash
  38. user8:x:1009:1009::/home/user8:/bin/bash
  39. user9:x:1010:1010::/home/user9:/bin/bash
  40. user10:x:1011:1011::/home/user10:/bin/bash

二、 while 循环

1.用法和特点

满足条件就一直循环,一旦不满足条件立刻跳出循环

while循环常在不知道范围的时候使用

基于这个特点 无限循环可以使用 while true

while 条件表达式

do

    命令序列              

done

2.操作实例

  1. //百米赛跑,速率为10m/s
  2. [root@localhost1 data]#vim whiletest.sh
  3. #!/bin/bash
  4. i=0
  5. rate=10
  6. s=0
  7. while [ $i -lt 100 ]
  8. do
  9. let i+=$rate
  10. let s++
  11. done
  12. echo "您一共用了$s秒!"
  13. //一共用了10s
  14. [root@localhost1 data]#bash whiletest.sh
  15. 您一共用了10秒!

三、until 循环

1.用法和特点

重复测试某个条件,只要条件不成立则反复执行

until 条件表达式

do

    命令序列              

done

2.操作实例 

  1. //使用until循环实现数字累加
  2. [root@localhost1 data]#vim sum.sh
  3. #!/bin/bash
  4. sum=0
  5. i=1
  6. until [ $i -gt 100 ] --当i不大于100使会一直执行
  7. do
  8. sum=$[sum + i] --将每次执行后的i累加到sum
  9. let i++ --每次执行后i自加
  10. done
  11. echo $sum
  12. [root@localhost1 data]#bash sum.sh
  13. 5050
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/369821
推荐阅读
  

闽ICP备14008679号