Linux基础--shell循环语句

Linux

循环语句

for循环

1
2
3
 for  变量名 in  列表;do
循环体
done

现在详细解释下for循环中的列表,又该如何去控制列表中的元素。
列表生成方式:

  • (1) 直接给出 列表

  • (2) 整数列表:

    • (a) {start..end}
    • (b)$(seq [start [step]] end)
  • (3) 返回列表的 命令

    • $(COMMAND)
  • (4) 使用glob如:*.sh

  • (5) 变量引用;$@, $*
    for循环的特殊格式

    1
    2
    3
    4
    for (( 控制变量初始化; 条件判断表达式; 控制变量的修正表达式))
    do
    循环体
    done
    • 控制变量初始化:仅在运行到循环代码段时执行一次
    • 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      #/bin/bash
      read -p "please enter MD5 encrypts the random number " num
      for j in `seq 0 32767`;
      do
      k=`echo "$j" |md5sum|cut -c1-10`
      if [[ $num == $k ]];then
      echo "$j"
      exit
      fi
      done

(2)while 循环

1
2
3
while CONDITION; do
循环体
done
  • CONDITION :循环控制条件;进入循环之前,先做一次判
    断;每一次循环之后会再次做判断;条件为“true” ,则执行
    一次循环;直到条件测试状态为“false”终止循环

  • 因此:CONDTION 一般应该有循环控制变量;而此变量的值
    会在循环体不断地被修正

  • 进入条件:CONDITION 为true

  • 退出条件:CONDITION 为false

    while 循环的特殊用法(遍历文件的每一行):依次读取/PATH/FROM/SOMEFILE 文件中的每一行,且将行赋值给变量line

    while read line; do
            循环体
    done < /PATH/FRO/SOMEFILE
    Ps:打印国际象棋的棋盘函数用while实现嵌套if函数
    #/bin/bash
    red(){ echo -e '\033[41m        \033[0m';}
    yellow(){ echo -e '\033[43m        \033[0m';}
    a=1
    while [ $a -le 10 ]
    do
    b=1
    while [ $b -le 10 ]
    do
            let c=$a+$b
            if [ `expr $c % 2` = "0" ]
            then
                    echo -en `red``red``red`
            else
                    echo -en `yellow``yellow``yellow`
            fi
            let b++
    done
            let a++
            echo
    done

    (3)until循环

    until CONDITION; do
            循环体
    done

    进入条件: CONDITION 为false
    退出条件: CONDITION 为true
    这里需要注意的是until和while的用法正好相反,while是条件判断为真时,继续执行循环,但是until却是条件判断为假的时候却是继续执行循环。所以,这样就给我们了很好的选择,但是在正常的生产构成中却是while和for语句用的稍微多一点。

    #!/bin/bash
    #step through all the positional parameters
    until [ -z "$1" ]
    do
            echo "$1"
    shift
    done
    echo

    (4)循环控制语句continue
    continue [N] :提前结束第N 层的本轮循环,而直接进入下一
    轮判断;最内层为第1层

    while CONDTIITON1; do
                    CMD1
                    ...
            if CONDITION2; then
                    continue [N]  #[N]的意思是我需要跳出几次循环默认为1是当前循环
            fi
            CMDn
            ...
    done

    (5)循环控制shift 命令

  • shift [n]用于将参量列表 list 左移指定次数,缺省为左移一次。

  • 参量列表 list 一旦被移动,最左端的那个参数就从列表中删
    除。while 到 循环遍历位置参量列表时,常用到 shift

    while [ $# -gt 0 ] # or (( $# > 0 ))
    do
            echo $*
    shift
    done

    (6)无限循环(while、until)

    1
    2
    3
    4
    5
    6
    while true; do
    循环体
    done
    until false; do
    循环体
    done

(8)select 循环与菜单

1
2
3
4
select variable in list
do
循环体命令
done
  • select 循环主要用于创建菜单,按数字顺序排列的示菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入
  • 用户输入菜单列表中的某个数字,执行相应的命令
  • 用户输入被保存在内置变量 REPLY 中
  • select 用 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 按 命令终止脚本。也可以按 ctrl+c退出循环
  • select 和经常和 case 联合使用
  • 与 for 略循环类似,可以省略 in list,此时使用位置参量
坚持原创技术分享,您的支持将鼓励我继续创作!
0%