shell 流程控制之循环以及案例

目录

流程控制之循环

一, 带列表的for循环语句

示例1:

示例2:

示例3:

示例4:

二,不带列表的for循环语句 

三, 类C风格的for循环语句

示例1:

示例2:

四,For 循环的嵌套

示例:

五, while循环语句

示例1:

示例2:

示例3:

六,while循环读取文件

七,until循环语句

示例:

八, select循环语句

示例:

九,利用break和continue语句控制循环

示例:


流程控制之循环

for循环是最简单,也是最常用的循环语句。与其他的程序设计语言一样,for循环都是初学者在学习循 环结构时的入门课程。for循环通常用于遍历整个对象或者数字列表。按照循环条件的不同,for循环语 句可以分为带列表的for循环、不带列表的for循环以及类C风格的for循环。

一, 带列表的for循环语句

带列表的for循环通常用于将一组语句执行已知的次数,其基本语法如下:

for variable in list

do

        statement1

        statement2

        ...

Done

示例1:

模拟音乐循环播放

1,使用命令  vim music_player.sh 打开脚本文件

[root@wangjingjing ~]# vim music_player.sh

2,按照要求编写脚本文件

(1)方法一

for song in song1 song2 song3 song4

do

    echo "current play $song"

    sleep 2

done

(2)方法二

for song in song{1..4}

do

    echo "current play $song"

    sleep 2

done

(3)方法三

for song in song{1,3,5,7}

do

    echo "current play $song"

    sleep 1

done

3,使用命令   bash music_player.sh  执行脚本文件,结果如下:

(1)方法一,二

[root@wangjingjing ~]# bash music_player.sh

current play song1

current play song2

current play song3

current play song4

(2)方法三

[root@wangjingjing ~]# bash music_player.sh

current play song1

current play song3

current play song5

current play song7

示例2:

测试主机192.168.206.131,132,133是否在线

方法一:

1,使用命令 vim ping_script.sh 打开脚本文件

[root@wangjingjing 0130]# vim ping_script.sh

2,按照要求编写脚本文件

#连续的变量用空格隔开

for ip in 192.168.206.131 192.168.106.132 192.168.206.133

do

#-c 2:发送2个数据包,并且不打印出来,写到/dev/null里面

    ping -c 2 $ip &>/dev/null

#如果状态码等于0,表示Ping通主机,显示host is online

    if [ "$?" -eq 0 ]

    then

        echo "host $ip is online"

#否则,输出host is offline

    else

        echo "host $ip is offline"

    fi 

done

3,使用命令  bash ping_script.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash ping_script.sh

host 192.168.206.131 is online

host 192.168.106.132 is offline

host 192.168.206.133 is online

方法二:

1,使用命令 vim ping_script.sh 打开脚本文件

[root@wangjingjing 0130]# vim ping_script.sh

2,按照要求编写脚本文件

for ip in 192.168.206.{131..133}

do

#-c 2:发送2个数据包,并且不打印出来,写到/dev/null里面

    ping -c 2 $ip &>/dev/null

#如果状态码等于0,表示Ping通主机,显示host is online

    if [ "$?" -eq 0 ]

    then

        echo "host $ip is online"

#否则,输出host is offline

    else

        echo "host $ip is offline"

    fi

done

3,使用命令  bash ping_script.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash ping_script.sh

host 192.168.206.131 is online

host 192.168.106.132 is offline

host 192.168.206.133 is online

方法三:

1,使用命令 vim ping_script.sh 打开脚本文件

[root@wangjingjing 0130]# vim ping_script.sh

2,按照要求编写脚本文件

#-f表示指定后面的格式,“%3g”中的3位宽度,%d打印浮点数,去掉多余0

for ip in `seq -f "192.168.206.%3g" 131 133`

do

#-c 2:发送2个数据包,并且不打印出来,写到/dev/null里面

    ping -c 2 $ip &>/dev/null

#如果状态码等于0,表示Ping通主机,显示host is online

    if [ "$?" -eq 0 ]

    then

        echo "host $ip is online"

#否则,输出host is offline

    else

        echo "host $ip is offline"

    fi

done

3,使用命令  bash ping_script.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash ping_script.sh

host 192.168.206.131 is online

host 192.168.206.132 is offline

host 192.168.206.133 is online

示例3:

打印:1-10之间的奇数-》 1,3,5,7,9

1,使用命令  vim num_script.sh 打开脚本文件

[root@wangjingjing ~]# vim num_script.sh

2,按照要求编写脚本文件

for i in {1..10..2}

do

    echo $i

done

3,使用命令   bash num_script.sh  执行脚本文件,结果如下:

[root@wangjingjing ~]# bash num_script.sh

1

3

5

7

9

示例4:

计算100以内的奇数和:

1,使用命令 vim num_script2.sh 打开脚本文件

[root@wangjingjing 0130]# vim num_script2.sh

2,按照要求编写脚本文件

sum=0

for i in {1..100..2}

do

#第一种方式

#    let sum+=i

#第二种方式

    ((sum+=i))

done

echo $sum

3,使用命令   bash num_script2.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash num_script2.sh

2500

二,不带列表的for循环语句 

       在某些特殊情况下,for循环的条件列表可以完全省略,称为不带列表的for循环语句。如果没有为for循 环提供条件列表,Shell将从命令行获取条件列表。不带列表的for循环语句的一般语法如下:

for variable

do

statement1

statement2

...

done

三, 类C风格的for循环语句

语法:

for((intialize;condition;operation))

do

 statement1

            ....

            statementN

Done

在上面的语法中,for循环语句的执行条件被2个圆括号包括起来。执行条件分为3个部分,由2个分号隔 开,第1部分expression1通常是条件变量初始化的语句;第2部分expression2是决定是否执行for循环 的条件。当expression2的值为0时,执行整个循环体;当expression2的值为非0时,退出for循环体。 第3部分,即表达式expression3通常用来改变条件变量的值,例如递增或者递减等。

示例1:

打印1-10

1,使用命令  vim cycle_ctl2.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_ctl2.sh

2,按照要求编写脚本文件

for ((i=1;i<11;i++))

do

    echo "$i"

done

3,使用命令 bash cycle_ctl2.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_ctl2.sh

1

2

3

4

5

6

7

8

9

10

示例2:

打印1-10里面的奇数

1,使用命令 vim cycle_ctl2.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_ctl2.sh

2,按照要求编写脚本文件

for ((i=1;i<11;i++))

do

    if (($i%2 != 0))

    then

        echo "$i"

    fi

done

3,使用命令 bash cycle_ctl2.sh 执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_ctl2.sh

1

3

5

7

9

四,For 循环的嵌套

示例:

打印10以内的奇数,以及10-20以内的奇数,20-30内的奇数

1,使用命令  vim nesting_for.sh 打开脚本文件

[root@wangjingjing 0130]# vim nesting_for.sh

2,按照要求编写脚本文件

#打印10以内的奇数,10-20以内的奇数,20-30以内的奇数

for i in 10 20 30

do

    for ((j=$i-9;j<$i;j++))

    do

        if (($j%2 != 0))

        then

            echo "$j"

        fi

    done

    echo "****************$i分割线***********"

done

3,使用命令  bash nesting_for.sh 执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash nesting_for.sh

1

3

5

7

9

****************10分割线***********

11

13

15

17

19

****************20分割线***********

21

23

25

27

29

****************30分割线***********

五, while循环语句

       while循环是另外一种常见的循环结构。使用while循环结构,可以使得用户重复执行一系列的操作,直 到某个条件的发生。这听起来好像跟until循环非常相似,但是与until语句相比,while语句有着较大的区别。

语法:

while expression

do

         statement1

done

示例1:

打印1-10

1,使用命令  vim cycle_while.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_while.sh

2,按照要求编写脚本文件

i=1

while (($i<11))

do

    echo "$i"

    let i+=1

done

 

3,使用命令   bash cycle_while.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_while.sh

1

2

3

4

5

6

7

8

9

10

示例2:

打印1-10内的奇数

1,使用命令  vim cycle_while.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_while.sh

2,按照要求编写脚本文件

i=1

while (($i<11))

do

    if (($i%2 != 0))

    then

        echo "$i"

    fi 

    let i+=1

done

3,使用命令  bash cycle_while.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_while.sh

1

3

5

7

9

示例3:

打印10以内的奇数,以及10-20以内的奇数,20-30内的奇数?

1,使用命令  vim cycle_while.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_while.sh

2,按照要求编写脚本文件

i=10

while (($i<31))

do

    let j=$i-9

    while ((j<=i))

    do

          if (($j%2 != 0))

        then

            echo "$j"

        fi

        let j++

    done

    echo "---------------$i的分界线---------------"

    let i+=10

done

 3,使用命令  bash cycle_while.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_while.sh

1

3

5

7

9

---------------10的分界线---------------

11

13

15

17

19

---------------20的分界线---------------

21

23

25

27

29

---------------30的分界线---------------

六,while循环读取文件

Read    每次读取一行

1,使用命令  vim while.txt 打开需要读取文件

[root@wangjingjing 0130]# vim while.txt

2,编写需要读取的文件内容

welcome to my world

you can do everything you want to do !

3,使用命令  vim while_read_file.sh 打开脚本文件

[root@wangjingjing 0130]# vim while_read_file.sh

4,按照要求编写脚本文件

(1)方法一

#使用命令read 读取文件内容

while read line

do

    echo "$line"

#把while.txt重定向给while循环;此处都在一个目录下,没有用绝对路径

done < while.txt

(2)方法二:

#把文件重定向给exec

exec < while.txt

#使用命令read 读取文件内容

while read line

do

    echo "$line"

done

5,使用命令   bash while_read_file.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash while_read_file.sh

welcome to my world

you can do everything you want to

七,until循环语句

        until循环语句同样也存在于多种程序设计语言中。顾名思义,until语句的作用是将循环体重复执行,直到某个条件成立为止。until语句的基本语法如下:

until expression

do

        statement1

        statement2

        ...

done

示例:

打印1-10

1,使用命令  vim cycle_until.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_until.sh

2,按照要求编写脚本文件

i=1

until ((i>11))

do

    echo "$i"

    let i+=1

done

3,使用命令  bash cycle_until.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_until.sh

1

2

3

4

5

6

7

8

9

10

八, select循环语句

        select循环语句的主要功能是创建菜单,在执行带有select循环语句脚本时,输出会按照数字顺序的列表 显示一个菜单,并显示提示符(默认是#?),同时等待用户输入数字选择。select语句的基本语法如 下:

select 变量名 [ in 菜单值列表 ]

do

        statement1

        statement2

        ...

done

示例:

模拟选择玩家

1,使用命令  vim cycle_select.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_select.sh

2,按照要求编写脚本文件

select op in players1 players2

do

    echo "$op"

done

~     

3,使用命令  bash cycle_select.sh  执行脚本文件,结果如下:

输入1,显示players1;输入2,显示players2;ctrl + c 退出;

[root@wangjingjing 0130]# bash cycle_select.sh

1) players1

2) players2

#? 1

players1

#? 2

players2

#? ^C

九,利用break和continue语句控制循环

在Shell中的循环结构中,还有2个语句非常有用,即break和continue语句。前者用于立即从循环中退出;而后者则用来跳过循环体中的某些语句,继续执行下一次循环。

break语句的作用是立即跳出某个循环结构。break语句可以用在for、while或者until等循环语句的循环体中。

continue语句则比较有趣,它的作用不是退出循环体。而是跳过当前循环体中该语句后面的语句,重新从循环语句开始的位置执行。

示例:

同一段代码分别用break和continue控制循环的不同效果

break:

1,使用命令  vim cycle_break.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_break.sh

2,按照要求编写脚本文件

for i in {1..10}

do

   

    if [ $i -eq 5 ]

    then

        break

    fi

    echo "$i"

done

3,使用命令  bash cycle_break.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_break.sh

1

2

3

4

 

Continue:

1,使用命令  vim cycle_continue.sh 打开脚本文件

[root@wangjingjing 0130]# vim cycle_continue.sh

2,按照要求编写脚本文件

for i in {1..10}

do

   

    if [ $i -eq 5 ]

    then

        continue

    fi

    echo "$i"

done

3,使用命令  bash cycle_continue.sh  执行脚本文件,结果如下:

[root@wangjingjing 0130]# bash cycle_continue.sh

1

2

3

4

6

7

8

9

10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值