一、在脚本中定义函数

与变量一样,在使用函数之前应该对函数进行定义。与其他编程类语言相比,由于没有数据类型的概念,因此也不必定义函数的类型。

(1)在脚本中可以使用以下方式定义函数:

function_name()
{
语句1
语句2
...
}

(2)有时为了便于阅读,也可以使用以下方式定义函数:

function function_name()
{
语句1
语句2
...
}

在上面这种方式中,使用了关键字function定义函数。这种方式有助于提高代码的可读性,因此建议使用这种方式定义函数。

【函数的命名约定】

  • 为了区别变量,建议所有函数名都有小写字母和下划线组成,并以字母开头。
  • 不要使用命令作为函数名称。
  • 不要在函数名中使用特殊字符。
  • 函数名应该尽量体现其功能。

除此之外,尽量不要在函数名中使用数字、有特殊意义的字符(例如true、false、return)、标点符号等。

二、在脚本中使用函数

在脚本中定义了函数后,下一步就是在脚本中调用函数执行特定的功能,可以在脚本中使用函数名直接调用函数。

函数定义和调用的简单示例:

[root@localhost shell]# cat func_exam.sh
#!/bin/bash #This is a example script.
#2013/12/17 hello()
{
echo "Now is the function hello."
echo "Hello!"
} function hi()
{
echo "Now si the function hi."
echo "Hi!"
} echo "Now call the function hello."
hello
echo "Now call the function hi."
hi
[root@localhost shell]# ./func_exam.sh
Now call the function hello.
Now is the function hello.
Hello!
Now call the function hi.
Now si the function hi.
Hi!

三、向函数传递参数和返回值

(1)在函数中获取传递的参数时,可以像脚本获取参数那样,使用位置变量$1、$2、$3等。

示例:

[root@localhost shell]# cat func_get_param.sh
#!/bin/bash #This is a example script.
#2013/12/17 function A()
{
echo `expr $1 + $2`
} D=`A 100 300` echo "D="$D
[root@localhost shell]# ./func_get_param.sh
D=400

(2)返回多个值的示例:

[root@localhost shell]# cat func_get_param.sh
#!/bin/bash #This is a example script.
#2013/12/17 function A()
{
sum=`expr $1 + $2`
sub=`expr $1 - $2`
} A 300 100 echo "sum="$sum
echo "sub="$sub
[root@localhost shell]# ./func_get_param.sh
sum=400
sub=200

上面的示例中,函数的返回值是通过变量来完成的,这种方式是借助变量的作用域在脚本中的全局性。

(3)使用预定义变量$?捕获函数是否成功执行:

[root@localhost shell]# cat func_ok.sh
#!/bin/bash #This is a example script.
#2013/12/17 function A()
{
echo `expr $1 + $2`
} D=`A 100 300` if [ $? = 0 ]
then
echo "Function succeeds!"
echo "D="$D
else
echo "Function fails."
fi
[root@localhost shell]# ./func_ok.sh
Function succeeds!
D=400

(4)使用if语句判断函数执行结果时,也可简写为:

if D=`A 100 300`
then
......

四、返回函数执行状态

在脚本中调用了函数之后,函数会执行函数结构体中的语句,完成后系统会根据函数中的最后一个语句的执行状态,自动返回函数的执行状态信息。但有时函数中的关键语句不是最后一句,这时就需要手动返回函数的执行状态。

要手动返回函数的执行状态,可以在函数最后使用return语句。return的使用方法和取值如下:

return:将函数最后一条命令的执行状态作为其状态信息返回。

return 0:返回函数成功执行信息。

return 1:返回函数错误的信息。

使用以上命令设置函数返回状态时,当脚本执行到return语句时,无论还有多少语句没有执行,脚本都会立即设置函数执行状态并返回。

Shell中的函数的更多相关文章

  1. shell中的函数、数组、报警系统脚本

    1.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这 个小单元的名字即可.格式: function f_name() {commond} ...

  2. centos shell脚本编程2 if 判断 case判断 shell脚本中的循环 for while shell中的函数 break continue test 命令 第三十六节课

    centos  shell脚本编程2 if 判断  case判断   shell脚本中的循环  for   while   shell中的函数  break  continue  test 命令   ...

  3. shell中的函数、shell中的数组、告警系统需求分析

    7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...

  4. Linux centosVMware shell中的函数、shell中的数组、

    一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...

  5. 在Shell中使用函数文件

    需要编写一个较庞大的脚本时,可能会涉及许多函数.变量.这是通常建议将众多的函数.变量放入一个单独的脚本内.这样做的好处很明显,不用担心某个函数.变量是否已经被定义和使用,也不用频繁地定义.清除函数和变 ...

  6. 小苏的Shell编程笔记之六--Shell中的函数

    http://xiaosu.blog.51cto.com/2914416/531247 Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以 ...

  7. shell中的函数、数组

    函数定义: 数组:

  8. shell中使用函数

    函数定义.调用 $ cat te.sh #!/bin/bash # define a function test() { echo "This is a function." } ...

  9. shell中的函数 shell中的数组 告警系统需求分析

     

随机推荐

  1. Java的平台无关性

    转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...

  2. sharepoint站点锁定后解锁

    MOSS站点备份过程中中断后导致整个站点处于锁定状态 其他的命令都无效,以下命令才解决问题 PS C:\Users\root> $Admin = new-object Microsoft.Sha ...

  3. SharePoint咨询师之路:备份和恢复系列三 - 备份web和服务应用程序

    本系列包括: 备份服务器场和配置 备份web和服务应用程序 备份内容数据库 备份网站集 备份自定义项 备份web应用程序和服务应用程序一样有三种方式:SharePoint管理中心网站.Windows  ...

  4. var隐式类型

    var dogName = "ruiky"; 1.[编译器]会在编译时自动根据值的类型推断这个变量的类型:       2.变量类型不可更改:因为声明的时候已经确定类型了. 3.可 ...

  5. AnnotationSessionFactoryBean用法介绍

    http://blog.csdn.net/flyingfalcon/article/details/8273618 —————————————————————————————————————————— ...

  6. VS2010编译器下针对C#和C++的opencv的配置方法

    我们大家都知道opencv是针对C.C++编写的,没有独立的编译调试工具.所以今天就捣鼓了一下在xp vs2010下配置C++和C#环境下的opencv.请大家一步一步的按步骤操作.本人亲自鉴定可行. ...

  7. jQuery实现等比例缩放大图片让大图片自适应页面布局

    通常我们处理缩略图是使用后台代码(PHP..net.Java等)根据大图片生成一定尺寸的缩略图,来供前台页面调用,当然也有使用前台javascript脚本将加载后的大图强行缩放,变成所谓的缩略图,这种 ...

  8. CENTOS LINUX查询内存大小、频率

    more /proc/meminfo dmidecode [root@barcode-mcs ~]# dmidecode -t memory linux下查看主板内存槽与内存信息 1.查看内存槽数.那 ...

  9. [添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码

    将nobody用户添加到nogroup 组:usermod -g nogroup nobody cat /etc/passwd|grep nobodynobody:x:65534:65534:nobo ...

  10. JedisPoolConfig配置

      JedisPoolConfig config = new JedisPoolConfig();   //连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true config. ...