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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

流程控制之循环

一 带列表的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.131132,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显示players2ctrl + 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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell