• bash6——循环


    for fruit in apple orange pear    #写死
    do
        each ${fruit}s
    done
    
    fruits="apple orange pear"   #输入变量的值
    for f in $fruits

    一、for循环

    1、向for提供数据

    1)写死 或 变量

    2)read

    3)从命令行读取$*    $@

      for fruit in $*; do  或者 for fruit; do(这一技术使用于函数,乱入函数:)

    do_i_like()
    {
        for fruit; do
        echo I realy like ${fruit}s
        done
    }
    do_i_like apple banana oranges

    4)使用seq命令给for输入数据(用于产生从某个数到另外一个数之间的所有整数)

      # seq 1 10
      结果是1 2 3 4 5 6 7 8 9 10  

      for i in `seq 1 10`

      for host in `grep "172.30.0" /etc/hosts | awk '{ print $2 }'`

    2  bash有类似C风格的for循环

      1 for ((i=1,j=100; i<=10; i++,j-=2 ))
      2 do
      3     printf "i=%03d j=%03d
    " $i $j
      4 done

    二、while循环

    在没有需要遍历的列表但在具有决定循环何时结束的可测试条件时,使用while最合适。

    1)测试循环本身的变化

    2)逐行读取文本文件的内容

    read password < /etc/passwd读入一行
    while read passwd
    do
        echo $passwd      #这里可以加入好多功能!
    done < /etc/passwd一直循环读,直到不再输入
    #!/bin/bash
    #通过管道循环读取/etc/passwd内容
    cat /etc/passwd | while read line
    do
    #以:为分割符,只读取第一个字段
        user=`awk -F : '{print $1}' <<< ${line}`
        echo "Account: ${user}"
    done

    3)重定向到文件

      1 i=1
      2 while [ $i -lt 5 ]
      3 do
      4     echo "`date`" : Partition $i
      5     ls -ld /dev/sda$i
      6     sleep 1
      7     let i=$i+1
      8 done > partition.txt 2>partitionerror.txt

    4)内置的:命令,或者是/bin/true命令,他们总是返回0,表示成功,使用他们可以让循环永远执行下去。

    host=${1:-declan}
    while grep -qw $host /tmp/hosts-to-ping.txt
    do
        :
    done

    5)死循环

      1 while :    #中间有空格
      2 do
      3     echo 'xx'
      4     sleep 1
      5 done

    用ctrl+c结束

    三、嵌套循环

    一个循环存在于另一个循环中

    四、循环的break和continue

    break  break 2退出两层;  

    continue  continue 2表示要跳转的外层循环层数

    五、带case的while循环

    就是while里边使用case

    六、until循环

    除了测试条件相反,until循环与while循环在其他地方完全相同。即满足条件就退出循环

    until 条件
    dodone

    七、select循环

    非常适合编写菜单的循环,常和if、case等一起使用

    它根本没有条件测试,退出的唯一方式是使用break或exit   打断用ctrl+c

    提示符在$PS3变量

    和for一样可以去掉in (x),这样select会使用自己所在的脚本或函数的$*参数

    我的samba管理器好想可以用它做一个命令行的!

      1 select item in one two three four five
      2 do
      3     if [ ! -z $item ]; then
      4         echo "You choiced $item"
      5         break
      6     else
      7         echo "$REPLY is not valid"  用户输入的值在$REPLY变量
      8     fi
      9 done
  • 相关阅读:
    【扯淡篇】SDOI2018丶一轮游丶记
    初来乍到, 多多包涵~
    【学术篇】The Xuanku Inversion Magic学习笔记
    【模板篇】树状数组(六)
    【学术篇】CF932E Team Work && bzoj5093 图的价值
    【模板篇】NTT和三模数NTT
    【学术篇】CF833B TheBakery 分治dp+主席树
    【学术篇】NOI2015 品酒大会 后缀数组+并查集
    【模板篇】数论大杂烩~
    【学术篇】SPOJ GEN Text Generator AC自动机+矩阵快速幂
  • 原文地址:https://www.cnblogs.com/daduryi/p/6739366.html
Copyright © 2020-2023  润新知