### 概览 - 列表循环:用于将一组命令执行已知的次数 - 不带列表循环,执行时由用户指定参数和参数的个数 - 类C风格循环 - break continue exit - ### 列表循环 - 方式一 ```shell # 无步长 for variable in {list} do command1 command2 ... done # 有步长 for variable in {list..步长} do command1 command2 ... done ``` - 方式二 ``` for variable in a b c do command1 command2 ... done ``` - 示例 ``` #! /bin/env bash # 步长为2 for i in {1..5..2} do echo $i done #! /bin/env bash for i in 1 2 3 4 5 do echo $i done ``` ### 不带列表循环 - 方式一 ``` for variable do command command ... done ``` - 示例 ``` #! /bin/env bash for i do echo hello done ``` - 自动用$@ 用户输入的所有参数进行循环 ``` me@me-EQ59:~/shell_demo/scripts/shell01$ bash -x for_not_list.sh a b c + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello me@me-EQ59:~/shell_demo/scripts/shell01$ ``` ``` me@me-EQ59:~/shell_demo/scripts/shell01$ bash -x for_not_list.sh {1..5} + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello me@me-EQ59:~/shell_demo/scripts/shell01$ ``` ``` me@me-EQ59:~/shell_demo/scripts/shell01$ bash -x for_not_list.sh `seq 5` + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello + for i in "$@" + echo hello hello me@me-EQ59:~/shell_demo/scripts/shell01$ ``` ### 类C风格循环 - 方式一 ``` # expr1 定义变量并赋初值 # expr 决定是否进行循环 # expr3 决定循环变量如何改变,决定循环什么时候退出 for (( expr1;expr2;expr4 )) do command command ... done ``` - 示例 ``` for (( i=1;i<=5;i++ )) do echo $i done ``` ``` me@me-EQ59:~/shell_demo/scripts/shell01$ for ((i=0;i<=5;i++));do echo $i;done 0 1 2 3 4 5 me@me-EQ59:~/shell_demo/scripts/shell01$ for ((i=0;i<=5;i++));do [ $((i%2)) -eq 0 ] && echo $i;done 0 2 4 me@me-EQ59:~/shell_demo/scripts/shell01$ ```