快速业务通道

bash shell笔记7 创建函数

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13

知识体系:
#创建函数
#使用参数
#共享函数
shell脚本代码可以封装在函数内,而函数可以在脚本任意处使用,由此减少大段代码的重复编写.

1、基本脚本函数
函数是被赋予名称的脚本代码块,可以在代码的任意位置使用.当需要调用代码块的时候,只需引用代码块被赋予的函数名即可.
1.1、创建函数
在bash shell脚本中创建函数可以使用两种方式:
*关键字function,基本格式为:
function name{
commands
}
*()方式:
name() {
commands
}
下面就对这两种方式举例创建.
1.2、使用函数
如下采用上面创建函数的两种方式举例:
[root@wzp ~]# chmod u x 7.1test
[root@wzp ~]# cat 7.1test
#!/bin/bash
function fun1 {
echo "this is the first function"
}
fun1
fun2() {
echo "this is the second function"
}
fun2
[root@wzp ~]# ./7.1test
this is the first function
this is the second function
这里头有两个函数名:fun1和fun2,对应两个函数执行后显示不同结果.
但是有点要注意的是先定义好函数,后才能调用,看个例子先:
[root@wzp ~]# cat 7.1test
#!/bin/bash
function fun1 {
echo "this is the first function"
}
fun1
fun2
fun2() {
echo "this is the second function"
}
[root@wzp ~]# ./7.1test
this is the first function
./7.1test: line 6: fun2: command not found
如上我把fun2放置在定义函数fun2之前就调用,shell是不会回头来执行的,对于函数fun2就报错了.
并且还要注意每个函数名唯一,如果重新定义函数,那么新定义的将取代原先的定义,看例子:
[root@wzp ~]# cat 7.1test
#!/bin/bash
function fun1 {
echo "this is the first function"
}
fun1
fun1() {
echo "this is the second function"
}
fun1
[root@wzp ~]# ./7.1test
this is the first function
this is the second function
例子很简单,效果也看出来了,我们最好区分出函数名了.

2、返回值
bash shell将函数看成小型脚本,并以退出状态结束,我们可以通过$?查看三种不同的退出状态,这一点前面已经讲述过了.
2.1、默认退出状态
我们先来看一个例子:
[root@wzp ~]# cat 7.2test
#!/bin/bash
function fun1 {
echo "this is the first function"
ls -l xx
}
fun1
echo "the exit status is :$?"
[root@wzp ~]# chmod u x 7.2test
[root@wzp ~]# ./7.2test
this is the first function
ls: xx: 没有那个文件或目录
the exit status is :2
我们看到函数的退出状态为2,一条命令执行出错了.再来看看另外一种情况:
[root@wzp ~]# cat 7.2test
#!/bin/bash
function fun1 {
ls -l xx
echo "this is the first function"
}
fun1
echo "the exit status is :$?"
[root@wzp ~]# ./7.2test
ls: xx: 没有那个文件或目录
this is the first function
the exit status is :0
我把函数的两条命令调换位置执行,可以看到第一条报错了,然后退出状态值却是0.从这点我们发现函数的默认退出状态是不可靠的.
2.2、使用return命令
return命令可以使用单个整数值来定义函数退出状态,如下例子:
[root@wzp ~]# cat 7.2test
#!/bin/bash
function cto {
read -p "enter a value:" value
echo "doubling the value"
return $[ $value * 2 ]
}
cto
echo "the new value is $?"
[root@wzp ~]# ./7.2test
enter a value:24
doubling the value
the new value is 48
函数cto将变量$value中用户输入的值变成双倍后,使用命令return命令返回结果,然后用$?显示该结果.
2.3、使用函数输出
对于命令输出可以捕获并存放到shell变量中,函数的输出也可以捕获并放到shell变量中,看例子:
[root@wzp ~]# chmod u x 7.3test
[root@wzp ~]# cat 7.3test
#!/bin/bash
ceo () {
read -p "please input a value:" value
echo $[ $value * 2 ]
}
result=`ceo`
echo "the result is : $result"
[root@wzp ~]# ./7.3test
please input a value:13
the result is : 26
通过定义函数后,把函数输出赋予给变量,这里使用反引号.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号