Shell编程中的循环语句和函数

一、for循环语句

        当面对各种列表重复任务时,使用简单的if语句已经难以满足需求,这时就需要for循环语句。for语句的结构为:

for 变量 in 取值列表

do

        命令序列

done

使用for循环语句时,需要指定一个变量及取值列表,针对不同的取值重复执行相同的命令序列,直到列表中的变量用完之后,退出循环。

        for循环的执行流程为:
 

         for循环的应用实例:根据IP地址检查主机状态。

 得出结果为:

二、使用while循环语句

        for循环语句适用于列表对象无规律,且列表来源已固定的场合。而对于按照特定条件执行重复操作的情况,则while更适合。

        在脚本应用中,while可以根据特定的条件反复执行一个命令序列,直到该条件不再满足为止。使用while时也应该注意,不要出现死循环的情况,死循环会导致while中的命令序列会一直重复执行,后边的命令操作将无法执行,因此,应在while内部写入修改测试条件的语句,以便在适当的时候跳出循环。

        while的语法结构:

while 条件测试操作

do

        命令序列

done

        while执行的流程为:

        while循环实例:猜价格游戏

        

三、until循环语句

        until循环与while循环类似,while循环能实现的脚本unti同样也可以实现,但区别是while循环在条件为真是继续执行循环,而unti则是在条件为假时执行循环。until的语法结构和while相似,流程也一样唯一不同的while是条件为真时才会循环,until是条件为假时才会循环。

        until循环实例:计算1~50的和

        

四、shell函数

        Shell函数可用于存放一系列的指令。在Shell脚本执行过程中,函数被之于内存中,每次调用函数时不需要从内存读取,因此运行的速度比较快。通过编写、使用函数,可以提高程序可读性与重用性,避免编写大量重复代码。

        Shell函数定义的方法如下:

[function] 函数名() {

        命令序列

        [return x]

}

  • “function”关键字表示定义一个函数,可以省略;
  • {"符号表示函数执行命令的入口,该符号可以与函数名同行也可以在函数名下一行的句首;
  • }”符号表示函数体结束,两个大括号之间{}是函数体;
  • “命令序列”部分可以是任意的 Shel 命令,也可以调用其他函数;
  • “return”表示退出函数返回一个退出值,通过返回值判断执行是否成功,也可以使用 exit 终止整个 Shell 脚本。

        Shell函数的调用的方法为:函数名 [参数1] [参数2]...。

4.2 函数变量的作用范围

        函数变量的作用范围分为:

  • 局部:局部变量只在函数内部有效,在函数外部不能调用。通常在函数名前加一个"local"关键字来声明局部变量,且只能在声明的函数内部使用。
  • 全局:在整个脚本中都能够使用,注意声明时不要与局部变量冲突。

4.3 函数的参数

        函数参数的用法如下:

函数名称  参数1 参数2 参数3......

在使用函数内部使用函数参数时,要使用"$n"这中形似使用,n是第n个参数。而从第10个参数开始,调用时要用"${n}"的方式。

4.4 递归函数

        递归函数就是指函数自己调用自己。例如:

myFunction() {

        if [ $1 -gt 0 ]

        then

                local num=$1

                let "num=$num-1"

                myFunction $num #这里递归地调用了自己

        fi

}

myFunction 5

五、 Shell数组

        在Shell脚本中,数组是一种常见的数据结构,主要的应用场景包括:获取数组长度、获取元素长度、遍历元素、元素切片、元素替换、元素删除等等。Shell 中的数组与Java、C、Python不同,只有一维数组,没有二维数组。数组元素的大小与限制,也不需要事先定义。Shell 数组用括号()来表示,元素用空格分隔,元素的下标与大部分编程语言类似从0开始。

        数组常用定义方法包括以下几种:

  1. 数组名=(value0 value1 value2......)
  2. 数组名=([0]=value [1]=value [2]=value......)
  3. 列表名=“value0 value1 value2......”           数组名=($列表名)
  4. 数组名[0]=“value”

        数组名[1]=“value”

        数组名[2]=“value”...

        下面通过具体的示例了解数组的基本使用方法:

        1. 获取数组长度

arr_number=(1 2 3 4 5)

arr_length=$(#arr_number[*])

echo $arr_number

5 #输出5

        2. 读取某下表赋值

arr_index2=${arr_number[2]}  #第三个元素

echo $arr_index2

2 #输出2

        3. 数组遍历

        4. 数组切片

arr=(1 2 3 4 5)

echo ${arr[@]} #输出整个数组

1 2 3 4 5 #输出

echo ${arr[@]:0:2}  #${数组名[@或*]:起始位置:长度}

1 2 #输出

echo ${arr[@]:2:3}

3 4 5

        5. 数组替换

arr=(1 2 3 4 5)

echo ${arr[@]/4/66}  #${数组名[@或*]/查找字符/替换字符}

1 2 3 66 5

echo ${arr[@]}  #并不会替换数组原有内容

arr=(${arr[@]/4/66})  #要实现改变原有数组,开通过重新赋值来实现

echo ${arr[@]}

1 2 3 66 5

        6. 数组删除

arr=(1 2 3 4 5)

unset arr  #删除数组

echo ${arr[*]}

arr=(1 2 3 4 5)

unset arr[2]   #删除第三个元素

echo ${arr[*]}

1 2 4 5

六、脚本调试

        为避免编写的脚本出错,除了在编写脚本时注意书写规范,排除语法错误,更重要的是利用调试脚本工具来调试脚本。echo命令是最有用的调试脚本工具之一,一般在可能出现问题的脚本中加入echo命令,采用的是分段排查的方式。除了echo命令之外,bash Shell也有相应参数可以调试脚本。使用bash命令参数调试,命令的语法为:

sh [-nvx] 脚本名

其中参数的含义为:

  • -n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提示报错。
  • -v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也给出错误提示。
  • -x:将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。

当脚本过长时,可以通过"set"命令,只调试部分脚本。通过在要调试脚本的上一行写上"set -x",在脚本末行的下一行写上"set -x"即可调试中间的脚本。

  • 22
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值