数据蛙数据分析每周作业

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

2020-12-26  本文已影响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以上,先一点一点的学习,加油肯定可以的)

上一篇下一篇

猜你喜欢

热点阅读