第十章 流程控制之for循环

1 语法

  1. #===========》Shell风格语法
  2. for 变量名 [ in 取值列表 ]
  3. do
  4. 循环体
  5. done
  6. #===========》C语言风格语法
  7. for ((初值;条件;步长))
  8. do
  9. 循环体
  10. done

2 循环控制及状态返回值的应用实践

image-20220422120343771.png

2.1 break案例

  1. #!/bin/bash
  2. for i in {1..5};do
  3. echo $i
  4. if [ $i == 3 ];then
  5. break
  6. fi
  7. echo $i
  8. done
  9. echo "ok"
  10. [root@xujun1270 ~]# sh break.sh
  11. 1
  12. 1
  13. 2
  14. 2
  15. 3
  16. ok
  17. 脚本中,本意是要循环执行1~5,但是当i等于3时,跳出循环,后面的45就不会执行了,但是因为只是跳出循环,所以脚本还是会继续执行,所以就出来后面的ok

2.2 continue案例

  1. #!/bin/bash
  2. for i in {1..5};do
  3. echo $i
  4. if [ $i == 3 ];then
  5. continue
  6. fi
  7. echo $i
  8. done
  9. echo "ok"
  10. [root@xujun1270 ~]# sh continue.sh
  11. 1
  12. 1
  13. 2
  14. 2
  15. 3
  16. 4
  17. 4
  18. 5
  19. 5
  20. ok
  21. continue就是在循环中,跳过的是本次循环,而不是整个循环,所以只跳过了3,但是循环还会执行下去

2.3 exit案例

  1. #!/bin/bash
  2. #
  3. for i in {1..5};do
  4. echo $i
  5. if [ $i == 3 ];then
  6. exit
  7. fi
  8. echo $i
  9. done
  10. echo "ok"
  11. [root@xujun1270 ~]# sh exit.sh
  12. 1
  13. 1
  14. 2
  15. 2
  16. 3
  17. exit就是直接退出整个shell脚本

3 案例

3.1 案例1:shell风格的for

  1. for i in {1..10};do
  2. echo $i
  3. done

3.2 案例2:c语言风格的for

  1. for ((i=1;i<=10;i++));do
  2. echo $i
  3. done

3.3 案例3:批量修改文件名

  1. #!/bin/bash
  2. for n in `ls|grep "html$"`;do
  3. mv $n `echo $n|cut -c 1-11`oldgirl.html
  4. done

3.4 案例4:批量创建用户和密码

  1. #!/bin/bash
  2. read -p "请输入创建的用户名信息: " name
  3. read -p "请输入创建的用户数量: " count
  4. for i in `seq -w $count`
  5. do
  6. echo $name$i
  7. useradd $name$i &>/dev/null
  8. echo 123456 | passwd --stdin $name$i &>/dev/null
  9. id $name$i &>/dev/null
  10. [ $? -eq 0 ] && echo "$name$i create is ok" || echo "$name$i create is failed"
  11. done