• shell脚本编程基础之for循环


    循环结构

    循环需要有进入条件和退出条件,如果没有退出条件,则就会一直循环下去
    
    for 变量 in 列表;do
      循环体
    done
    

    生成列表及示例

    {1..100}:生成1到100的整数列表
    `command`:使用命令生成列表
    
    Example1:
    #!/bin/bash
    for i in /data/*;do
           echo "$i"
    done
    for循环可以对目录下的文件列表进行循环;如果目录下有三个文件,则执行三次循环;如果/data/下有文件f1.txt,则i的值就为/data/f1.txt
    
    Example2:
    #!/bin/bash
    #
    declare -i SUM=0              #指明SUM变量是一个整数型变量;变量的值为整数;指定求和变量的初始值为0
    
    for I in {1..100};do
       let SUM=$[$SUM+$I]        #指定SUM变量是一个整数型变量
    done
    echo "the sum number is: $SUM"
    把列表里面的1赋值给变量I,SUM变量的初始值为0,所以SUM变量的值为$SUM+$I,SUM=0+1=1;当I=2时,SUM的值为$SUM+$I=1+2=3,以此类推,退出循环的条件为I为100时,列表已经没有元素,退出循环,最后打印SUM的值,从1+2+3..100
    
    Example3:
    #!/bin/bash
    declare -i SUM=0
    declare -i SUMS=0
    for i in {1..10};do
       NUM=$[$i%2]
       if [ $NUM -eq 0 ];then
           let SUM=$[$SUM+$i]
       else
           let SUMS=$[$SUMS+$i]
       fi
    done
    echo "even is: $SUM"
    echo "odd is: $SUMS"
    计算100以内的奇数和偶数的和各是多少
    
    Example4:
    #!/bin/bash
    declare -i SUM=0
    for I in {1..100};do
       SUMS=$[$I%3]
       if [ $SUMS -eq 0 ];then
           SUM=$[$SUM+$I]
       fi
    done
    echo "$SUM"
    计算100以内,3的倍数的数相加的和
    
    Example5:
    #!/bin/bash
    if [ $# -lt 1 ];then
       echo "Parameters not empty"
       exit 8                               #必须指定exit,如果不添加exit,执行完这个判断之后还会继续执行下面的判断
    fi
    
    if [ $1 == '--add' ];then
       for i in {1..10};do
           if ! id user$i &>/dev/null;then
               useradd user$i
               echo "user$i" | passwd --stdin user$i &>/dev/null
               echo "add user$i finished"
           else
               echo "user$i exists"
           fi
       done
    elif [ $1 == '--del' ];then
       for i in {1..10};do
           if id user$i &>/dev/null;then
               userdel -r user$i
               echo "Delete user$i finished"
           else
               echo "no such user"
           fi
       done
    else
       echo "Input error"
       exit 10
    fi
    循环添加10个用户或者删除10个用户
    
    Example6:
    #!/bin/bash
    if [ $1 == '--add' ];then
       for i in `echo "$2" | sed -n 's/,/ /gp'`;do       #sed后面必须加g选项,否则只搜索替代第一个,加上g是全局搜索替代
           if id $i &>/dev/null;then
               echo "$i exists"
           else
               useradd $i
               echo "$i" | passwd --stdin $i &>/dev/null
               echo "add $i finished"
           fi
       done
    elif [ $1 == '--del' ];then
       for i in `echo "$2" | sed -n 's/,/ /gp'`;do
           if id $i &>/dev/null;then
               userdel -r $i
               echo "delete $i"
           else
               echo "$i not exists"
           fi
       done
    else
       echo "unknow options"
    fi
    通过--add xxx,xxx,xxx进行自定义添加和删除用户
    

    组合条件测试

    -a:与关系
    -o:或关系
    !:非关系
    
    Example:
    [ $# -gt 1 -a $# -le 3 ]
    [ $# -gt 1 ] && [ $# -le 3 ]
    

    德·摩根定律

    非(A 且 B) = (非 A) 或 (非 B)
    非(A 或 B) = (非 A) 且 (非 B)
    
    Example:
    #!/bin/bash
    declare -i MAX=0
    declare -i MIN=0
    
    for i in {1..10};do
       MYRAND=$RANDOM          #需要把RANDOM变量生成的随机数保存到另一个变量中,如果不保存,最下面的判断成立,会给MAX、MIN赋值一个新的随机数
       [ $i -eq 1 ] && MIN=$MYRAND       #MIN只需要参与一次循环,如果不加限制条件,MIN会参与10次循环,这样随机数会一直等于MIN,而不会小于
       if [ $i -le 9 ];then
           echo -n "$MYRAND,"      #-n表示取消换行符
       else
           echo "$MYRAND"
       fi
       [ $MYRAND -gt $MAX ] && MAX=$MYRAND    #添加判断条件;如果MYRAND的值大于MAX值,则MAX的值为MYRAND的值          
       [ $MYRAND -lt $MIN ] && MIN=$MYRAND    #如果MYRAND的值小于MIN的值,则MIN的值为MYRAND的值
    done
    echo "$MAX,$MIN"
    循环10次,生成10个随机数,取出其中的最大最小值
  • 相关阅读:
    Atcoder Regular Contest 123 题解
    Atcoder Grand Contest 015 F Kenus the Ancient Greek(找性质+乱搞)
    Solution 「CF 575G」Run for beer
    Solution 「CF 510E」Fox And Dinner
    Solution 「洛谷 P4389」付公主的背包
    Solution 「CF 555E」Case of Computer Network
    Solution 「CF 802C」Heidi and Library (hard)
    Solution 「JOISC 2020」「UOJ #509」迷路的猫
    Div弹出框
    JS对话框
  • 原文地址:https://www.cnblogs.com/dongzhanyi123/p/12013781.html
Copyright © 2020-2023  润新知