shell脚本中函数的运用
- 一、函数的定义
- 二、函数的作用范围
- 三、实验
- 1、阶乘
- 2、函数库
一、函数的定义
shell函数是经常使用的,因为有些命令序列是需要反复调用执行的,将命令序列按格式写在一起,以便可以重复的使用。
shell函数:
使用函数可以避免代码重复
使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强
格式为:
[function] 函数名(){
命令序列
[return x]
}
或
函数名 () {
命令序列
}
[function]是可选的,表示该函数的功能,是可以省略掉的,函数后面加一个(),里面是没有内容,而执行的命令序列是放在{}里面的,[return x]的作用是当命令序列执行完后返回给系统的一个值,该项也是可以省略的。
函数返回值:
return表示退出函数并返回一个退出值,脚本可以用$?变量显示该值
使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2、退出的代码必须是0~255,超出时值将为除以256取余
二、函数的作用范围
在 Shell 脚本中函数的执行并不会开启一个新的子Shell,而是仅在当前定义的Shell 环境中有效。如果Shell脚本中的变量没有经过特殊设定,默认在整个脚本中都是有效的。在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。
- 函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
- shell脚本中变量默认全局有效
- local命令:将变量限定在函数内部使用
[root@c7-1 home]# vim dome4.sh
#!/bin/bash
myfunc () {
local a
a=8
echo $a
}
a=9
myfunc
echo $a
[root@c7-1 home]# bash dome4.sh
8
9
#上述脚本中myfun函数内部使用了local命令设置变量a,其作用是将变量a限定在函数内部。
#myfun函数外部同样定义了变量i,内部变量a和全局变量i互不影响。
#脚本执行时先调用了函数myfun,函数内部变量a为8,所以输出结果是8。
#调用完函数之后,给变量a赋值为9,再打印外部变量i,所以又输出9
三、实验
1、阶乘
阶乘可以使用for循环做,但是for循环的效率比递归函数低,所以这里使用函数递归的方式写。
#上述脚本中先运行交互式变量,$n,根据你输入的数字调用函数fa,
#先if判断我输入的数是否等于1,我输入的5,不等于1,条件为假,运行else
#然后定义a变量 $1 -1 也就是 5-1 得出4 ;定义b变量,在把a的值 4 调用给fa;他俩都是内部变量
#然后echo $1 也就是5,乘 $b 4;只有自上而下运行完所有命令 才会再次用$res的调用a,继续判断$tmp是否等于1,直至5-1=4 4-1=3 3-1=2 2-1=1;
#所以5x4x3x2x1=120
2、函数库
先定义一个函数库func,里面写入五个函数