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

目录
一、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以上,先一点一点的学习,加油肯定可以的)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容