美文网首页
shell编程其实真的很简单(四)

shell编程其实真的很简单(四)

作者: 木有鱼丸啦 | 来源:发表于2019-06-27 15:38 被阅读0次

上篇我们学习了shell中条件选择语句的用法。接下来本篇就来学习循环语句。在shell中,循环是通过for, while, until命令来实现的。下面就分别来看看吧。

for

for循环有两种形式:

for-in语句

基本格式如下:


for var in list

do

commands

done

list代表要循环的值,在每次循环的时候,会把当前的值赋值给var(变量名而已,随意定), 这样在循环体中就可以直接通过$var获取当前值了。

先来一个例子吧:

#!/bin/bash

for str in a b c d e

do

echo $str

done

以上会根据空格将abcde分割,然后依次输出出来。

如果以上例子不是以空格分割,而是以逗号(,)分割呢?

#!/bin/bash

list="a,b,c,d,e"

for str in $list

do

echo $str

done

结果输出a,b,c,d,e

造成这个结果的原因是:for...in循环默认是循环一组通过空格或制表符(tab键)或换行符(Enter键)分割的值。这个其实是由内部字段分隔符配置的,它是由系统环境变量IFS定义的。当然,既然是由环境变量定义的,那当然也就能修改啊。

修改IFS值

#!/bin/bash

#定义一个变量oldIFS保存未修改前的IFS的值

oldIFS=$IFS

#修改IFS值,以逗号为分隔符

IFS=$','

list=a,b,c,d,e

list2="a b c d e"

for var in $list

do

echo $var

done

for var2 in $list2

do

echo $var2

done

#还原IFS的值

IFS=$oldIFS

以上第一个循环会分别输出abcde几个值。而第二个循环会输出a b c d e(即未处理)。因为我们把IFS的值设置为逗号了, 当然,不一定要是逗号,想设置什么,你说了算!

C语言风格的for循环

bash中c语言风格的for循环遵循如下格式:

for (( variable assignment ; condition ; iteration process ))

一个例子足以说明:

#!/bin/bash

for (( i = 0; i <= 10; i++ ))

do

echo $i

done

上面例子循环11次,从0到10依次输出。稍微有过编程基础的都对此应该很熟悉。就不做详细阐述了。

while循环

如果你习惯了其它语言的while循环,那么到这儿你又会发现这个while循环有点变态了。与其它编程语言while的不同在于:在bash中的while语句,看起来似乎是结合了if-then语句(参考上一篇)和for循环语句。其基本格式如下:

while test command

do

other commands

done

与if-then语句一样,后面接test命令,如果test后面的命令的退出状态码为0. 那么就进入循环,执行do后面的逻辑。要注意在do后面的逻辑中写条件,避免死循环。

既然是接test命令,那么一切都可以参考if-then的test

示例一:

#!/bin/bash

flag=0

while test $flag -le 10

do

echo $flag

# 如果没有这句,那么flag的值一直为0,就会无限循环执行

flag=$[$flag + 1]

done

以上判断flag是否大于或者等于10, 如果满足条件,那么输出当前flag的值,然后再将flag的值加1。最终输出的结果为0到10的结果。

结合上一篇文章test的写法,我们还可以将以上示例变形为如下:

示例二:

#!/bin/bash

flag=0

while [ $flag -le 10 ]

do

echo $flag

flag=$[$flag + 1]

done

示例三:

flag=0

while (( $flag <= 10 ))

do

echo $flag

flag=$[$flag + 1]

done

### until循环语句

until语句基本格式如下:

until test commands

do

other commands

done

在掌握while循环语句之后, until语句就很简单了。until语句就是与while语句恰好相反, while语句是在test命令退出状态码为0的时候执行循环, 而until语句是在test命令退出状态码不为0的时候执行。

示例:

#!/bin/bash

flag=0

until (( $flag > 10 ))

do

echo $flag

flag=$[ $flag + 1 ]

done

以上输出0到10的值。until后面的条件与上面while例子完全相反。

好啦,到此,我们学完了shell的循环语句啦。不过上面我们写的循环语句都是根据条件执行完毕,如果我们在执行的过程中想退出,该怎么办?接下来就继续看看怎么控制循环语句。

控制循环

与其它编程语言一样,shell是通过break和continue命令来控制循环的。下面就分别来看看二者的基本用法:

break

  1. break用于跳出当前循环。

示例一:

#!/bin/bash

for (( flag=0; flag <= 10; flag++ ))

do

if (( $flag == 5 ))

then

break

fi

echo $flag

done

以上当flag的值为5的时候,退出循环。输出结果为0-4的值。

  1. break用于跳出内层循环。

示例二:

#!/bin/bash

flag=0

while (( $flag < 10 ))

do

for (( innerFlag=0; innerFlag < 5; innerFlag++ ))

do

if (( $innerFlag == 2 ))

then

break

fi

echo "innerFlag=$innerFlag"

done

echo "outerFlag=$flag"

done

以上代码在执行内部循环for的时候,当innerFlag值为2的时候就会跳出到外层的while循环, 由于外层循环一直flag都为0, 所以while会成为一个死循环,不停的输出:


innerFlag=0

innerFlag=1

outerFlag=0

  1. break用于跳出外层循环

break 可后接数字,用于表示退出当前循环的外层的第几层循环。

示例三:

#!/bin/bash

flag=0

while (( $flag < 10 ))

do

for (( innerFlag=0; innerFlag < 5; innerFlag++ ))

do

if (( $innerFlag == 2 ))

then

# 2表示外面一层循环

break 2

fi

echo "innerFlag=$innerFlag"

done

echo "outerFlag=$flag"

done

与上面例子相比,本例就只是在break后面跟了个数字2,表示退出外面的第一层循环。最终输出:

innerFlag=0

innerFlag=1

continue

continue表示终止当前的一次循环,进入下一次循环,注意,continue后面的语句不会执行。

continue的语法与break一样,因此,就只做一个示例演示啦。

示例:

flag=0

while (( $flag <= 10 ))

do

if (( $flag == 5 ))

then

flag=$[$flag+1]

continue

fi

echo "outerFlag=$flag"

for (( innerFlag=11; innerFlag < 20; innerFlag++ ))

do

if (( $innerFlag == 16 ))

then

flag=$[$flag+1]

continue 2

fi

echo "innerFlag=$innerFlag"

done

done

以上例子: 当for循环中innerFlag的值为16的时候会跳到外层while循环,当外层循环的flag的值为5的时候,会直接跳过本次循环,然后进入下一次循环,因此在输出的结果中,不会出现outerFlag=5的情况。

相关文章

  • shell编程其实真的很简单(四)

    上篇我们学习了shell中条件选择语句的用法。接下来本篇就来学习循环语句。在shell中,循环是通过for, wh...

  • shell编程其实真的很简单(一)

    shell编程其实真的很简单(一) 如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能...

  • shell编程其实真的很简单(二)

    上篇我们学会了如何使用及定义变量。按照尿性,一般接下来就该学基本数据类型的运算了。没错,本篇就仍是这么俗套的来讲讲...

  • shell编程其实真的很简单(五)

    通过前几篇文章的学习,我们学会了shell的基本语法。在linux的实际操作中,我们经常看到命令会有很多参数,例如...

  • shell编程其实真的很简单(三)

    通过前两篇文章,我们掌握了shell的一些基本写法和变量的使用,以及基本数据类型的运算。那么,本次就将要学习she...

  • shell 案例

    Shell编程一 Shell防范ARP攻击 Shell编程二 Shell防范DDos攻击 Shell编程三 ...

  • Powershell快速入门(一) 安装和使用

    一说起 Shell 编程,我们大家想到的应该都是Linux 下的 Shell 编程。其实 Windows 下也可以...

  • 其实编程很简单

    明明很简单的事情,但有些人会故意把他讲得很复杂,以显示老师的水平,或则老师本身就不擅长讲课,讲不明白。 之前我跟着...

  • shell 第一天

    shell编程初识 1.1 shell编程初识 shell的定义 Shell 是命令解释器 Shell 也是...

  • Linux之Shell简介

    linux下编程离不开shell, window中也存在shell。shell其实是一个命令解释器,接收用...

网友评论

      本文标题:shell编程其实真的很简单(四)

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