当前位置: 首页 > 编程笔记 >

详解shell 函数定义与调用

焦信鸥
2023-03-14
本文向大家介绍详解shell 函数定义与调用,包括了详解shell 函数定义与调用的使用技巧和注意事项,需要的朋友参考一下

一、Shell函数定义格式

shell函数定义格式,各部分说明如下:

[ function ]等中括号括起来部分----表示可选(即可有可无)

your_function_name部分----为函数名

your_shell_commands部分----为函数代码;shell一般以行为单位,但可以使用“\”换行,也可以在单行内使用“;”作为分隔符

return int部分----shell函数可以有返回值,但只能返回整数不能返回字符串

[ function ] your_function_name()
{
  your_shell_commands;
  [return int;]
}

二、基本函数定义与调用

本节程序实现函数定义与调用,注意调用函数是不要使用括号(即如testFun()是不对的),代码如下:

testFun{
  echo "helloworld!"
}

testFun

运行如下:

三、传递参数调用

3.1 传递参数没有空格

本节程序实现向被调用函数传递参数,$0是运行该脚本的shell传递的参数从$1开始、传递多个参数是以空格分隔,代码如下:

testFun(){
  echo $1
}

param="helloworld!"
testFun $param

运行如下:

除了可以通过$n形式获取第n个参数外,还可以使用以下几个写法:

形式 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

3.2 传递参数有空格

本节程序实现向被调用函数传递有空格的参数,我们将上节“helloworld!”加个空格变为“hello world!”如下:

testFun(){
  echo $1
}

param="hello world!"
testFun $param

运行如下:

可以看到只有空格前的“hello”被打印了出来,空格后的“world!”并没被打印出来(实际上空格后的"world!"被识别成了$2)

要传递有空格的参数也简单,在传递时加上双引号即可(单引号就不被认为是变量了所以不能用单引号),代码如下:

testFun(){
  echo $1
}

param="hello world!"
testFun "$param"

运行如下:

四、获取返回值

4.1 返回整型

testFun(){
  echo "helloworld!"
  return 99
}


# 千万要注意shell并不像其他语言直接返回返回值,其返回值放到$?中,这也是为什么只能返回整型的原因
# 所以这种承接方法是错误的,获取到的值是echo打印的内容
# return_value=`testFun`
# 以下才是正确获取通过return返回的返回值的正确写法
testFun
echo "the return value is: $?"

4.2 返回字符串

我们在前面一直说shell函数只能返回整型不能返回字符串,我们试一下强行返回字符串,代码如下:

testFun(){
  echo "helloworld!"
  return "success"
}

testFun

运行如下,可以看到运行到return处报错“-bash: return: success: numeric argument required”

所以要通过return返回字符串是没戏的,我们有两个变通的方法,第一种是通过$()获取函数的所有打印,代码如下:

testFun(){
  echo "helloworld!"
  echo "success"
}

return_value=$(testFun)
echo "$return_value"

运行如下:

可以看到成功获取到了‘success“。但同时也可以看到这种做法获取到的被调用函数的所有输出,单要返回值到得单独解析一下

另外的一种做法是直接用一个变量,shell的变量都是全局的在被调用函数中赋值的变量在调用函数处也可获取,代码如下:

testFun(){
  echo "helloworld!"
  return_value="success"
}

testFun
echo $return_value

运行如下:

参考:

http://edu.jb51.net/linux/linux-shell-passing-arguments.html

以上就是详解shell 函数定义与调用的详细内容,更多关于Shell 函数定义与调用的资料请关注小牛知识库其它相关文章!

 类似资料:
  • 本文向大家介绍Python定义函数功能与用法实例详解,包括了Python定义函数功能与用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python定义函数功能与用法。分享给大家供大家参考,具体如下: 1.函数的意义 一般数学上的函数是,一个或者几个自变量,通过某种计算方式,得出一个因变量。 y = f(x) 在Python中,为了使操作更加简洁,就引入了函数这个概念。 Pyth

  • 本文向大家介绍SQL Function 自定义函数详解,包括了SQL Function 自定义函数详解的使用技巧和注意事项,需要的朋友参考一下 目录 产生背景(已经有了存储过程,为什么还要使用自定义函数) 发展历史 构成 使用方法 适用范围 注意事项 疑问 内容 产生背景(已经有了存储过程,为什么还要使用自定义函数) 与存储过程的区别(存在的意义): 1.     能够在select等SQL语句中

  • 4.2.4 小结:函数的定义与调用 通过前面的例子,读者应该已经非常熟悉 Python 中函数定义的语法。在此总结如下: def <函数名>(<形式参数>): <函数体> 其中函数名是标识符,命名必须符合 Python 标识符的规定;形式参数是用逗号分隔的变量名序列(可以为空)。函数体是语句序列,左端必须缩进一些空白。 一旦定义了一个函数,就可以在程序的任何地方调用这个函数。函数调用的语

  • 本文向大家介绍详解Javascript函数声明与递归调用,包括了详解Javascript函数声明与递归调用的使用技巧和注意事项,需要的朋友参考一下 Javascript的函数的声明方式和调用方式已经是令人厌倦的老生常谈了,但有些东西就是这样的,你来说一遍然后我再说一遍。每次看到书上或博客里写的Javascript函数有四种调用方式,我就会想起孔乙己:茴字有四种写法,你造吗? 尽管缺陷有一堆,但Ja

  • $this->db->call_function(); 这个方法用于执行一些 CodeIgniter 中没有定义的 PHP 数据库函数,而且 使用了一种平台独立的方式。举个例子,假设你要调用 mysql_get_client_info() 函数,这个函数 CodeIgniter 并不是原生支持的,你可以这样做: $this->db->call_function('get_client_info')

  • 定义函数 在JavaScript中,定义函数的方式如下: function abs(x) { if (x >= 0) { return x; } else { return -x; } } 上述abs()函数的定义如下: function指出这是一个函数定义; abs是函数的名称; (x)括号内列出函数的参数,多个参数以,分隔; { ...