博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Shell函数定义与调用
阅读量:5263 次
发布时间:2019-06-14

本文共 1674 字,大约阅读时间需要 5 分钟。

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

运行如下:

 

三、函数传参调用

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

testFun(){    echo $1}param="helloworld!"testFun $param

运行如下:

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

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

 

 

 

 

 

 

 

 

 

 

 

四、传递有空格参数

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

testFun(){    echo $1}param="hello world!"testFun $param

运行如下:

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

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

testFun(){    echo $1}param="hello world!"testFun "$param"

运行如下:

 

五、返回字符串

我们在第一节中说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"}testFunecho $return_value

运行如下:

 

参考:

转载于:https://www.cnblogs.com/lsdb/p/10148177.html

你可能感兴趣的文章
VB.NET全角半角check
查看>>
[Leetcode 33] 38 Count and Say
查看>>
洛谷 P1433 吃奶酪【DFS】+剪枝
查看>>
zookeeper 安装 测试及集群
查看>>
adb shell
查看>>
Lucene 01 - 初步认识全文检索和Lucene
查看>>
Winedt打开tex文件报错error reading的解决方案
查看>>
Java Concurrency - 浅析 CyclicBarrier 的用法
查看>>
f2fs解析(八)node 管理器中的node_info
查看>>
uilabel的文字连接用button来替代
查看>>
拓扑排序的模板实现
查看>>
HDU 4828 - Grids (Catalan数)
查看>>
NTFS格式 读取MFT信息
查看>>
适配器模式
查看>>
用struct模块解决tcp的粘包问题
查看>>
PsExec.exe执行远程程序
查看>>
抽取、转换和装载介绍(九)小结
查看>>
可以开发着玩一下的web项目
查看>>
oracle 中 UPDATE nowait 的使用方法
查看>>
二叉查找树中节点的删除
查看>>