bash脚本编程之函数
什么是函数功能啊?简单的说,其实,函数可以在shellscript 当中做一个类似自己定义执行命令的东西,最大的功能是可以简化我们许多的程序代码,避免代码重新编写实现结构化编程,但是不能独立执行,只能调用,在调用的时刻执行!
如何定义函数的呢:
1
2
3
|
function FUNC_NAME { 或 FUNC_NAME(){
函数体 函数体
} }
|
那个FUNC_NAME就是我们的自定义的执行命令名称(名称格式还是以字母、数字、下划线组成,不能以数字开头,尽量做到见名之意),而函数体就是我们要它执行的内容了。要注意的是因为shell脚本的执行方式是由上而下、由左而右,因此在shell脚本当中的函数(function)要在程序的最前面,这样才能够在执行时被找到可用的程序段。好,下面我们举一个名为function1的简单的例子来看一下函数的执行过程。
1
2
3
4
5
6
7
|
[root
@station94
~]# vimfunction1.sh
#!/bin/bash
#
function Echo {
echo
"hello bash"
}
Echo
|
当然,上面这个例子举得太简单了,所以你不会觉得function有什么好厉害,不过,如果某些程序代码一再地在脚本中重复使用时,这个function可就重要的多喽!它不但可以简化程序代码,而且可以做成类似“模块”的玩意儿,真的很不错呦!!
另外,bash函数可以接受参数,在调用函数时直接向其传递即可;例如:
1
|
FUNC_NAME argu1,argu2 ...
|
由此可以看出它的调用参数方式和shell脚本的调用方式很类似,也是使用$1,$2,...来代替哦!
举例说明:传递一个用户名,查看用户是否存在若存在则取出该用户的shell和ID号。
1
2
3
4
5
6
7
8
|
[root@station94 ~]# vimfunction2.sh
#!/bin/bash
#
ShowUserInfo() {
id $1 &> /dev/null && grep
"^$1:"
/etc/passwd |cut -d: -f3,7
}
read -p
"A username: "
UserName
ShowUserInfo $UserName
|
当然,上面这个脚本中用户没有输入直接回车了怎么办??由于没有了用户名函数没有执行成功,但是它的返回值竟然是0;
这是怎么回事?
其实这是因为bash函数有返回值而且还有两种:
•执行结果,通常使用echo或者print输出;
•状态返回值:0,1-255
可以自定义:函数在函数体执行的任何位置遇到return语句,函数就结束执行,并且返回指定状态码;
1
2
3
4
5
6
7
8
9
|
[root@station
94
~]# vimfunction
2
.sh
#!/bin/bash
#
ShowUserInfo() {
id $
1
&> /dev/null && grep
"^$1:"
/etc/passwd |cut -d: -f
3
,
7
&& return
0
|| return
3
注:return定义状态返回值,成功为
0
不成功则为
3
.
}
read -p
"A username: "
UserName
ShowUserInfo $UserName
echo $?
|
再说,bash函数中的变量函数的作用范围:
举例说明:
1
2
3
4
5
6
7
8
9
10
|
[root@station94 ~]# vim function3.sh
#!/bin/bash
#
ShowUser(){
UserName=hello
echo $UserName
}
UserName=jerry
echo $UserName
ShowUser
|
结果会是什么样的呢??
和你预料的一样吗??哎呦不一样说明当函数中的变量和主变量一样时会改变主函数的值,而且会长期有效。
1
2
3
4
5
6
7
8
9
10
|
[root@station94 ~]# vim function3.sh
#!/bin/bash
#
ShowUser(){
local UserName=hello 注:local定义局部变量,变量作用域
echo $UserName
}
UserName=jerry
echo $UserName
ShowUser
|
在我们调用别人的函数或者别人调用我们的函数时有可能会出现主函数名和函数名冲突或相同,当我们做修改时主函数可能也被修改,这是不行的,所以我们以后在声明变量时尽量使用local声明,这样可以避免一些不必要的错误发生。
小记:function 本身其实比较困难一点,如果你还想进行其他编写的话得多加学习。不过,笔者仅是想要更加了解shell脚本而已,所以,这里看看即可,赞赞就行,了解基本使用原理就好喽!!
本文转自 z永 51CTO博客,原文链接:http://blog.51cto.com/pangge/1260107