首页 > 系统相关 >详解shell 函数定义与调用

详解shell 函数定义与调用

时间:2022-12-15 18:39:04浏览次数:59  
标签:testFun shell return echo 空格 调用 如下 详解

一、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

运行如下:

详解shell 函数定义与调用_字符串

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

 

形式

说明

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数

$$

脚本运行的当前进程ID号

$!

后台运行的最后一个进程的ID号

$@

与$*相同,但是使用时加引号,并在引号中返回每个参数。

$-

显示Shell使用的当前选项,与set命令功能相同。

$?

显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

 

3.2 传递参数有空格

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

testFun(){
echo $1
}

param="hello world!"
testFun $param

运行如下:

详解shell 函数定义与调用_传递参数_02

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

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

testFun(){
echo $1
}

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

运行如下:

详解shell 函数定义与调用_字符串_03

四、获取返回值

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”

详解shell 函数定义与调用_字符串_04

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

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

return_value=$(testFun)
echo "$return_value"

运行如下:

详解shell 函数定义与调用_shell脚本_05

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

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

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

testFun
echo $return_value

运行如下:

详解shell 函数定义与调用_调用函数_06

学而不思则罔,思而不学则殆



标签:testFun,shell,return,echo,空格,调用,如下,详解
From: https://blog.51cto.com/u_15766933/5945609

相关文章

  • shell -am-help内容
    Activitymanager(activity)commands:helpPrintthishelptext.start-activity[-D][-N][-W][-P][--start-profiler][--samplingINTERVAL][--streaming][-......
  • Python super() 详解 最简单的解释
    首先提一下,经典类和新式类。在Python2中,如果定义类的方式是classMyClass:那么该类叫做经典类,如果定义类的方式为classMyClass(object):那么该类为新式类。在Python3中......
  • 二、memcache 启动参数详解
    memcache启动参数:(以最新1.6.17为例)memcache--help命令提示点击查看代码memcached1.6.17-p,--port=<num>小写p,memcached监听的tcp端口。(默认端口为11211)......
  • shell_product信息
    HWASK-H:/$getprop|grepproduct[hw_mc.settings.product_cust_date]:1603075625[ro.boot.product.hardware.sku]:ASKH-AL00[ro.comp.hl.product_base_version]:......
  • python的元组详解
    names=["zhangsan","lisi","wangwu","zhaoliu"]#从元组中取出来元素print(names[0:3])#打印第0个到第2个元组,取左不取右print(names[-1])#打印元组的最后一个元素#添加元......
  • 简单创建webservice接口并采用rpc方式调用
    简单创建webservice接口并采用rpc方式调用一、简单创建webservice接口1.新建一个maven项目2.创建一个包3.创建一个接口在新建的包下创建接口点击查看代码public......
  • SQL优化篇之-如何减少耗时查询的调用次数
    背景在查询语句中,如果Select子句中,调用较为耗时的函数或子查询,比较各种SQL语句的编写方案,得出其中最优选择。一、数据准备,SQL语句模拟较耗时的用户函数或子查询......
  • Linux常用命令与shell脚本学习
    Linux常用命令1、关机/重启/注销常用命令作用shutdown-hnow即刻关机shutdown-h1010分钟后关机shutdown-h11:0011:00关机shutdown-h+10预......
  • VSCode-Path_to_shell_executable的问题
    VSCode:Theterminalprocessfailedtolaunch:Pathtoshellexecutable"D:\code\g++"doesnotexist的问题下午使用VSCode编译一个cpp文件,突然报了这样一个问......
  • PowerShell 创建一个文件选择器
    从这篇文章得到借鉴  PowerShell技能连载-创建一个文件夹选择器-叹为观止(vichamp.com)(80条消息)PowerShellGUI之基础知识_feiqizhanghao的博客-CSDN博客_po......