详解shell 函数定义与调用

 更新时间:2020年09月22日 12:05:02   作者:诸子流  
这篇文章主要介绍了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 函数定义与调用的资料请关注脚本之家其它相关文章!

相关文章

  • shell中长命令的换行处理方法示例

    shell中长命令的换行处理方法示例

    这篇文章主要给大家介绍了关于shell中长命令的换行处理方法,文中通过示例代码介绍的非常详细,对大家学习或者使用shell具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Shell脚本中获取命令运行结果的实现

    Shell脚本中获取命令运行结果的实现

    本文主要介绍了Shell脚本中获取命令运行结果的实现,除了我们熟知的管道 | 和args,我们也可以通过获取命令的运行结果,本文就来介绍一下,感兴趣的可以了解一下
    2023-10-10
  • 实现自动清除日期目录shell脚本实例代码

    实现自动清除日期目录shell脚本实例代码

    这篇文章主要介绍了实现自动清除日期目录shell脚本实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • shell监控脚本 准备工作分享

    shell监控脚本 准备工作分享

    这篇文章主要介绍了在编写监控功能脚本需要做的一些工作,需要的朋友可以参考下
    2013-11-11
  • shell脚本echo输出不换行功能增强实例

    shell脚本echo输出不换行功能增强实例

    这个脚本很简单,就是可以用3种不同的函数(方法)来实现,输出后不换行
    2016-08-08
  • 详解linux下tree命令的用法

    详解linux下tree命令的用法

    tree是一种递归目录列表命令,产生一个深度缩进列表文件,这是彩色的ALA dircolors如果ls_colors设置环境变量和输出是TTY。下面通过本文给大家分享linux下tree命令的用法,感兴趣的朋友一起看看吧
    2017-09-09
  • linux 命令中的lynx解析

    linux 命令中的lynx解析

    lynx命令是纯文本模式的网页浏览器,不支持图形、音频、视频等多媒体信息,这篇文章主要介绍了linux 命令中的lynx解析,需要的朋友可以参考下
    2024-07-07
  • 详解Linux使用shell+expect远程登录主机

    详解Linux使用shell+expect远程登录主机

    这篇文章主要介绍了详解Linux使用shell+expect远程登录主机的相关资料,这里提供了详细的实现步骤,需要的朋友可以参考下
    2017-08-08
  • Linux中rz命令和sz命令使用详解大全

    Linux中rz命令和sz命令使用详解大全

    在linux中rz 和 sz 命令允许开发板与主机通过串口进行传递文件了,下面我们就来简单的介绍一下rz 和 sz 命令实例
    2015-10-10
  • shell 中小括号、中括号及大括号的区别解析

    shell 中小括号、中括号及大括号的区别解析

    这篇文章主要介绍了shell 中小括号,中括号,大括号的区别,针对每种括号给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-10-10

最新评论