Shell 通用命令之流程控制(二)

134 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

书接上文,今天我们接着把流程控制补全.

您能在这里看到啥

  1. 循环语句
  2. 跳出循环指令

循环语句

对于循环,我想大家应该都不陌生.基本上我们所接触的编程语言.循环都大差不差.只是循环数据包容性或多或少的差异而已.下面我们就一起来看一下shell循环语句吧.

  1. for循环

    • for var in data

      当变量值在列表里,for 循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的 shell 命令和语句。in 列表可以包含替换、字符串和文件名

      eg:

      for name in 天使 火锅 shell
      do
          echo "name is $name"
      done
      

      执行结果:

      截屏2022-11-27 21.30.23.png

    • for((exp1; exp2; exp3))

      exp1 、exp2 、exp3 代表三个表达式.其中exp2必须是判断条件.for循环是根据exp2判断条件,来决定是否执行下一次循环操作

      eg:

      count=10
      for ((i = 0; i < "$count"; i++)); do 
         echo "$i"
      done
      

      执行结果:

      截屏2022-11-27 21.36.32.png

  2. while循环

    while循环.只要不满足判断条件就一直执行循环操作.(先执行判断条件,后执行循环操作)

    • 有限循环
      count=1
      while (( $count<=10 ))
      do  
          echo $count  
          let "count++"  
      done
      
    • 无限循环
      while :
      do
          echo "无限循环"
      done
      
      或者
      while true:
      do
          echo "无限循环"
      done
      
  3. until循环

    until循环 刚好和while循环,执行顺序相反,先执行do再执行until判断条件.

    eg:

    count=0
    until [ ! $count -lt 10 ]; do
        echo $count
        count=$((count + 1))
    done
    

    执行结果:

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
  4. case ... esac

    这个和switch ... case ** 语句时一样的.都是多分枝选择结构,每一个case分支用)开始,以;;表示break**.即此执行结束.并跳出case esac循环.

    eg:

    casein
    模式1)
        command1
        ;;
    esac
    

跳出循环指令

这个跳出循环基本上都一样,但是据我所知,还是有很多程序员.对breakcontinue会混淆.并且也是面试的时候,最最最基本的问题.下面我们来一起重温一下吧.

这里.我们先看一下代码.看看输出的结果是啥.这样也方便我们理解

count=10
for ((i = 0; i < "$count"; i++)); do
if [[ $((i % 2)) == 0 ]]; then
    # break
    # continue
    # exit
    # return
fi
echo "$i"
done
echo "执行完成"
  1. break命令

    执行结果,如下所示:

    截屏2022-11-27 19.34.00.png

    由于我们的判断条件是2的倍数.当执行第一次循环的时候,i=0,满足我们的判断条件.所以,执行了break命令.从结果中,我们可以得到初步的结论

    break相当于直接结束了循环操作.并继续执行循环操作后的逻辑.

  2. continue命令

    执行结果,如下所示

    截屏2022-11-27 20.56.12.png

    从上面的输出结果,我们惊奇的发现,输出的都是奇数.说明执行了continue后,偶数没有被打印,也没有阻断循环操作.从中,我们得到结论是

    continue只是跳出本次循环.然后会继续执行下一次循环操作.

  3. exit 执行结果,如下所示

    截屏2022-11-27 21.02.36.png

    exit 直接退出脚本.并返回满足条件的值.由于我们这里判断条件是偶数,所以没有返回值.

  4. return

    执行结果,如下所示:

    截屏2022-11-27 21.08.20.png

    从上面的结果中,首先我们发现,有警告.通过对提示语的解读,我们得到,如果你使用return,请你使用函数来执行.那我们修改一下代码,如下所示

    截屏2022-11-27 21.15.38.png

    重新看一下执行结果.

    截屏2022-11-27 20.56.12.png

    return 直接退出当前函数.(小细节return命令不能直接使用在脚本的主程序里.只能使用在函数里)