美文网首页数据蛙数据分析每周作业
Shell中for,while,until循环语句用法及8道案例

Shell中for,while,until循环语句用法及8道案例

作者: 夜希辰 | 来源:发表于2020-12-26 15:48 被阅读0次

    目录
    一、for循环语法
    二、while循环语法
    三、until循环语法
    四、8道案例练习
    五、知识点总结
    1、循环语句for,while,until用法
    2、if 条件判断 (文件、整数、字符串、多重条件判断)
    3、四则运算

    前言:数据类的shell案例我找到的很少,网上的shell案例实战更多是运维方向的。自己现在还是shell学习阶段,以后会多整理数据开发、ETL开发中如何运用shell脚本,目前文章更多是shell中某一个语法。

    循环语句:Bash Shell中主要提供了三种循环方式:for、while和until。
    首先我们先看这三种循环的语法。

    一、for循环语法

    列表for循环:用于将一组命令执行已知的次数

    语法一:
    for variable in {list}   #variable 变量
         do
              command     #command 命令行
              command
              …
         done
    
    语法二:
    for variable in a b c
         do
             command
             command
         done
    # for var in 1 2 3 4 5;do echo $var;done
    
    语法三:
    类C风格的for循环
    for(( expr1;expr2;expr3 ))
        do
            command
            command
            …
        done
    #expr1:定义变量并赋初值
    #expr2:决定是否进行循环(条件)
    #expr3:决定循环变量如何改变,决定循环什么时候退出
    
    举例
    # for ((i=1;i<=5;i++));do echo $i;done
    # for ((i=1;i<=10;i+=2));do echo $i;done
    # for ((i=2;i<=10;i+=2));do echo $i;done
    

    二、while循环语法

    特点:条件为真就进入循环;条件为假就退出循环

    i=1
    while expression  #expression表达式,eg:[ 1 -eq 1 ]  (( 1 >= 1 ))
    #while首先进行条件测试,如果条件测试为真,则进入循环,执行命令区域,否则不进入循环
    do
        command
        command
    done
    
    举例
    i=1
    while [ $i -le 5 ]  #当变量i小于5时,执行下面的循环体中的命令
    do
        echo $i
        let i++
    done
    

    三、until循环语法

    特点:条件为假就进入循环;条件为真就退出循环

    until expression  #expression表达式,eg:[ 1 -eq 1 ]  (( 1 >= 1 ))
        do
            command
            command
            ...
        done
    
    举例
    i=1
    until [ $i -gt 5 ] #gt大于,当变量i大于5不成立的时候,执行下面的循环体中的命令
    do
        echo $i
        let i++
    done
    

    四、案例练习

    练习题
    1、用for循环/home/study/study_shell目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的文件
    2、使用for循环、while循环计算100以内的偶数和
    3、使用for循环打印9*9乘法表
    4、使用while循环打印9*9乘法表
    5、使用for循环计算100以内的奇数和
    6、使用while循环计算100以内的奇数和
    7、使用类C风格的 for循环计算100以内的奇数和
    8、判断所输整数是否为质数

    1、用for循环/home/study/study_shell目录下创建aaa1-aaa10,然后在aaa1-aaa10创建bbb1-bbb10的文件

    #!/bin/bash
    #path:/home/study/study_shell
    #1、用for循环在/home/study/study_shell目录下创建aaa1-aaa10目录
    #2、然后在aa1-aaa10创建bbb1-bbb10的目录(在aaa1目录中创建bbb1-bbb10的文件,在aaa2目录中创建bbb1-bbb10的文件)
    
    for i in `seq 10`
    do
        mkdir /home/study/study_shell/aaa$i
        cd /home/study/study_shell/aaa$i
        for j in `seq 10`
            do
            touch bbb$j
            done
    done
    
    说明:

    (1)seq 用于产生从某个数到另外一个数之间的所有整数

    2、使用for循环、while循环计算100以内的偶数和

    2.1、for循环计算100以内的偶数和
    #!/bin/bash
    #使用for循环计算100以内的偶数和
    sum=0
    for i in {1..100}
    do
        if [ $[$i%2] -eq 0 ];then #eq等于,%取余
            sum=$[$sum+$i]
        fi
    done
    echo "100以内的偶数和为${sum}"
    
    说明:

    (1){1..100}会生成一个空格分隔的数字序列字符串
    (2)if [ $[$i%2] -eq 0 ],条件判断之判断整数,当变量除以2的余数等于0成立时,执行下面的步骤

    条件判断语法
    语法1: test 条件表达式  
    #test -e file   只要文件存在条件为真
    
    语法2: [ 条件表达式 ]   
    #[ $[id -u] -eq 0 ] 
    #[ $[$i%2] -eq 0 ]
    
    语法3: [[ 条件表达式 ]] 支持正则 =~
    
    语法4:类C风格的数值比较
    #(($[$a%2]==0));echo $?
    

    参考文档:黑马程序员课件___条件判断 (文件、整数、字符串、多重条件判断)
    (3)[$i%2]、[$sum+$i],四则运算。

    四则运算语法:
    语法1: $(( )) 
    #echo $((1+1))或者a=$((1+1))
    
    语法2:$[ ]    
    #echo $[10-5]或者a=$[10-5]
    
    语法3:expr    
    #expr 10 / 5
    
    语法4:let 
    #n=1;let n+=1 等价于 let n=n+1
    
    2.2、while循环计算100以内的偶数和
    #!/bin/bash
    #使用while循环计算100以内的偶数和
    i=1
    sum=0
    while [ $i -lt 101 ]
    do
        if [ $[$i%2] -eq 0 ];then
            sum=$[$sum+$i]
        fi
        let i+=1 
           #let i+=1 等于let n=n+1
    done
    echo "100以内的偶数和为${sum}"
    

    3、使用for循环打印9*9乘法表

    #!/bin/bash
    #使用for循环打印9*9乘法表
    for i in `seq 9`
    do
        for j in `seq $i`
        do
            echo -n "$j*$i=$[$j*$i]   "
            #echo -n 不换行输出
        done
        echo
    done
    
    说明

    (1)echo -n 不换行输出
    (2)单独一个echo,作用是换行

    4、使用while循环打印9*9乘法表

    #!/bin/bash
    #使用while循环打印9*9乘法表
    i=1
    while [ $i -le 9 ]
    do
        j=1
        while [ $j -le $i ]
        do
            echo -n "$j*$i=$[$j*$i]   "
            let j++
        done
        let i++
        echo
    done
    
    说明

    (1)let j++等于let n=n+1

    5、使用for循环计算100以内的奇数和

    #!/bin/bash
    #使用for循环计算100以内的奇数和
    sum=0
    for i in {1..100..2}
    do
        let sum=sum+i
    done
    echo "100以内的奇数和为:${sum}"
    
    说明:

    (1) {1..100..2} 用于产生从1到100之间的所有整数,整数之间的间隔是2
    (2)let sum=sum+i四则运算

    6、使用while循环计算100以内的奇数和

    #!/bin/bash
    #使用while循环计算100以内的奇数和
    i=1
    sum=0
    while [ $i -le 100 ]
    do
        if [ $[$i%2] -eq 1 ];then
        sum=$[$sum+$i]
        fi
        let i++
    done
    echo "100以内的奇数和为:${sum}"
    
    感想:

    这个代码看着就6行,挺简单的,但写的时候改了5个地方才能正常运行。就像SQL一样看着很简单,但在实际业务过程中会遇见很多问题。还是要多多练习。

    7、使用类C风格的 for循环计算100以内的奇数和

    类C风格的for循环语法:
    for(( expr1;expr2;expr3 ))
        do
            command
            command
            …
        done
    #expr1:定义变量并赋初值
    #expr2:决定是否进行循环(条件)
    #expr3:决定循环变量如何改变,决定循环什么时候退出
    
    举例
    # for ((i=1;i<=5;i++));do echo $i;done
    # for ((i=1;i<=10;i+=2));do echo $i;done
    # for ((i=2;i<=10;i+=2));do echo $i;done
    

    练习

    #!/bin/bash
    #使用类C风格的for循环计算100以内的奇数和
    
    sum=0
    for ((i=1;i<=100;i+=2))
    do
        let sum=sum+i
    done
    echo "100以内的奇数和为:${sum}"
    

    8、判断所输整数是否为质数

    #!/bi /bash
    #判断所输整数是否为质数
    #质数除了本身和1以外并没有任何其他因子
    #质数表:2 3 5 7 11 13 17 19 23 29
    
    read -p  "请输入一个正整数:" number
    if [ $number -eq 1 ];then
        echo "${number}不是质数"
    elif [ $number -eq 2 ];then
        echo "${number}是质数"
    else
        for i in `seq 2 $[$number-1]`
        do
        if [ $[$number%$i] -eq 0 ];then
        echo "${number}不是质数"
        exit
        fi
        done
        echo "${number}是质数"
    fi
    

    说明:

    (1)if语法结构

    语法一:if...else结构
    if [ condition ];then
            command1
        else
            command2
    fi
    
    语法二:if...elif...else结构
    if [ condition1 ];then
            command1    结束
        elif [ condition2 ];then
            command2    结束
        else
            command3
    fi
    

    五、知识点总结

    1、循环语句for,while,until用法

    文章位置:所有内容都涉及

    2、 if 条件判断 (文件、整数、字符串、多重条件判断)

    文章位置:四、案例练习___8、判断所输整数是否为质数
    文章位置:四、案例练习___2、使用for循环、while循环计算100以内的偶数和
    文章位置:四、案例练习___6、使用while循环计算100以内的奇数和
    参考文档:黑马程序员课件___条件判断 (文件、整数、字符串、多重条件判断)

    3、四则运算

    文章位置:四、案例练习___2、使用for循环、while循环计算100以内的偶数和

    4、感想

    shell语法真的很乱,比如条件判断就有4中语法,并且数字和文件的条件判断语法还不是一样的.关于if条件判断,for循环,以及四则运算在文章中都涉及了.以后在工作中如果遇见相应的问题在看这篇文章总结把

    --------------------------------20201228星期一中午----------------------------------------

    shell现在就不在放假时间单独学习了,如果要学习就在工作的时间学习。现在要开始做项目了【不过周末关于循环的学习、以及定义函数的学习还是非常棒棒的】
    在公司里面shell学习下
    1、awk的使用+shell时间的处理——20201228、29学习计划
    2、grep的使用
    2、复习下文件的if操作
    4、重点学习下shell链接数据库的操作,用shell加载数据到数据库,用shell从数据库里面导数据
    5、在学习下shell对文件的操作,就是把文件从一个地方放在另外一个地方
    6、剩下的就是记一下面试题吧,毕竟自己也只能写一些简单的函数,没有参与过真实的项目实战。

    …………最近总是失眠,中午失眠,晚上失眠。明明周末两天都在图书馆还特别有罪恶感,学习了还感觉自己什么都没学习一样。最近应该是压力太大了(明年想找个更好的工作,我想去jm科技做数仓开发,因为这家公司有大数据,然后工资在15K以上,先一点一点的学习,加油肯定可以的)

    相关文章

      网友评论

        本文标题:Shell中for,while,until循环语句用法及8道案例

        本文链接:https://www.haomeiwen.com/subject/llqpnktx.html