Bash脚本之函数定义和调用

简介:

把那些在脚本中重复出现并且没有任何改变的代码,封装起来,在适当的场景中调用执行。程序员将这种被封装起来的代码称为功能体,或者叫模块,也称为函数。这样看来是不是和循环类似,循环也是为了方便去多次执行一堆代码,而函数是将一堆代码写在一起,起一个名字,然后在需要这堆代码的时候只需要写上函数的名字即可。在shell脚本编程中,函数是由若干条shell命令组成的语句块,函数里面的内容和shell程序形式上是一致的。不同之处就是,shell代码可以直接被执行,而函数中的内容,不能独立执行,只有被调用的时候才执行。比如:

1
2
3
4
#!/bin/bash
out(){
echo  "123"
}
1
2
[root@localhost class] # bash hanshu 
[root@localhost class] #

在上面这个例子中,我在脚本中写入了一个函数,但是没有去调用它,所以在执行这个脚本后,没有任何的输出。接下来说一下如何去定义一个函数。

函数是由函数名称和函数体(能够实现独立功能的shell语句块)两部分组成,格式为:

1
2
3
function  func_name {
函数体
}

或者:

1
2
3
func_name() {
函数体
}

注意:函数名和()之间不能加空白字符

这两种不同的定义方法都可以定义函数,不同点在于函数名字前的“function”这个命令,这个命令可有可无。定义函数不一定非得在脚本中定义,还可以在交互式环境下定义,比如在命令行中直接输入函数名来定义,例如:

1
2
3
4
[root@localhost class] # out()
> {
echo  "123"
> }
1
2
[root@localhost class] # out
123

在定义的时候,一个函数以“{”开始,以“}”结束,在定义完成后就可以直接使用名字来调用这个函数。可以使用“set”命令来查看自己定义的和系统内已经存在的函数,使用unset命令可以撤销已经定义的函数。值得注意的是在当前shell内定义的函数只能在当前shell中使用,一旦关闭,那么定义的函数就会消失。同理,在脚本中定义的函数会随着脚本的关闭而消失,比如:

1
2
3
testEcho(){
echo  "执行了show函数"
}
1
2
3
4
5
6
[root@localhost class] # bash testfunction 
[root@localhost class] # testEcho
bash : testEcho: 未找到命令...
[root@localhost class] # source testfunction 
[root@localhost class] # testEcho
执行了show函数


在这个例子中我们可以看到,当使用bash执行脚本之后在脚本内加载了“testEcho”这个函数但是随着这个脚本的关闭,再执行这个函数的时候就会报错了,而之后我又使用了“source”命令来执行这个脚本之后,在当前shell内就可以使用脚本内定义的函数了。这是一种在当前shell中使用脚本内函数的方法。

像命令一样,函数的执行也会有一个返回值,分为以下两种:

第一种是函数的执行结果的返回值,例如在函数体中某些命令输出的结果;

第二种是函数的状态返回值:

1.函数中最后一条命令的执行状态返回值;

2.自定义退出状态码:

1
return  [n]

n:0-255 (1 2 127尽可能不使用)

0: 表示无错误返回

1-255:有错误返回

注意:跟其他编程语言一样,只要函数在执行时,遇到了return命令,不管函数中的命令语句是否全部执行完成,立刻退出函数。一个函数从被调用开始,直到遇到return命令或全部的语句执行完才终止。

在调用函数的时候我们也可以将一些参数传入进去,方法是在调用函数的时候直接在函数名后头写上参数,使用空格隔开,比如:func_name arg1 arg2 ...。在函数体中,可以使用$1,$2,..等位置变量来调用外部调用此函数时为此函数提供的参数,和脚本一样,还可以使用$*或$@的方式引用所有位置参数或者使用$#计算为函数传递的参数个数。举例如下:

1
2
3
4
5
#!/bin/bash
out(){
echo  $@
}
out a b c  #在这里调用函数,并将“a b c ”作为参数传到函数中
1
2
[root@localhost class] # bash funcdiaoyong
a b c
















本文转自正经的青年51CTO博客,原文链接: http://blog.51cto.com/11142243/1927827 ,如需转载请自行联系原作者




相关文章
|
6月前
|
监控 安全 Shell
防止员工泄密的措施:在Linux环境下使用Bash脚本实现日志监控
在Linux环境下,为防止员工泄密,本文提出使用Bash脚本进行日志监控。脚本会定期检查系统日志文件,搜索敏感关键词(如"password"、"confidential"、"secret"),并将匹配项记录到临时日志文件。当检测到可疑活动时,脚本通过curl自动将数据POST到公司内部网站进行分析处理,增强信息安全防护。
176 0
|
30天前
|
Devops 关系型数据库 大数据
1000个开源免费的bash脚本合集
【10月更文挑战第4天】
|
6月前
|
存储 Shell Linux
Linux Bash 脚本中的 IFS 是什么?
【4月更文挑战第25天】
127 0
Linux Bash 脚本中的 IFS 是什么?
|
3月前
|
Shell
一个能够生成 Markdown 表格的 Bash 脚本
【8月更文挑战第20天】这是一个使用Bash脚本生成Markdown表格的示例。脚本首先设置表头与内容数据,然后输出Markdown格式的表格。用户可以根据需要自定义表格内容。使用时,只需将脚本保存为文件(如 `generate_table.sh`),赋予执行权限,并运行它,即可在终端看到生成的Markdown表格。
|
3月前
|
Unix Shell Linux
在Linux中,什么是Bash脚本,并且如何使用它。
在Linux中,什么是Bash脚本,并且如何使用它。
|
3月前
|
Shell 开发者
深入理解Bash脚本中的函数
【8月更文挑战第20天】
49 0
|
3月前
|
存储 Shell 数据处理
深入探讨Bash脚本中的数组
【8月更文挑战第20天】
30 0
|
3月前
|
存储 Shell
Bash 脚本中的 `hash` 命令
【8月更文挑战第19天】
30 0
|
3月前
|
监控 安全 Shell
有用的 Bash 别名和函数简介
有用的 Bash 别名和函数简介
20 0
|
5月前
|
Unix Shell Linux
技术经验分享:Bash脚本命令使用详解
技术经验分享:Bash脚本命令使用详解
45 0