Linux 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 $
}
param="helloworld!"
testFun $param
运行如下:

除了可以通过$n形式获取第n个参数外,还可以使用以下几个写法:
| 形式 | 说明 |
|---|---|
| $# | 传递到脚本的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
| $- | 显示Shell使用的当前选项,与set命令功能相同。 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
3.2 传递参数有空格
本节程序实现向被调用函数传递有空格的参数,我们将上节“helloworld!”加个空格变为“hello world!”如下:
testFun(){
echo $
}
param="hello world!"
testFun $param
运行如下:

可以看到只有空格前的“hello”被打印了出来,空格后的“world!”并没被打印出来(实际上空格后的"world!"被识别成了$2)
要传递有空格的参数也简单,在传递时加上双引号即可(单引号就不被认为是变量了所以不能用单引号),代码如下:
testFun(){
echo $
}
param="hello world!"
testFun "$param"
运行如下:

四、获取返回值
4.1 返回整型
testFun(){
echo "helloworld!"
return
}
# 千万要注意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://www.runoob.com/linux/linux-shell-passing-arguments.html
Linux Shell函数定义与调用的更多相关文章
- Shell 函数定义与调用
linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...
- linux shell 函数返回值问题(超过255)
最近再写一个shell测试的时候出现问题,函数返回值异常 用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后 ...
- Linux Shell函数返回值
转:http://blog.csdn.net/ithomer/article/details/7954577 Shell函数返回值,一般有3种方式:return,argv,echo 1) return ...
- Linux Shell 函数返回值
Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...
- Linux Shell——函数的使用
文/一介书生,一枚码农. scripts are for lazy people. 函数是存在内存里的一组代码的命名的元素.函数创建于脚本运行环境之中,并且可以执行. 函数的语法结构为: functi ...
- Linux shell 函数应用示例01
函数Function的使用 定义函数 (1) 函数名称() { ... ... } (2) function 函数名称{ ... ... } 调用函数 ...
- JavaScript函数定义和调用 变量作用域
本文是笔者在看廖雪峰老师JavaScript教程时的个人总结 JavaScript中函数定义可以是这样的格式 function 函数名(参数) { 函数体 } 也可以是这样的格式 ...
- javascript、jQuery函数定义和调用方法
一.javascript 1.var aaa=function(){...} var 方式定义的函数,不能先调用函数,后声明,只能先声明函数,然后调用. 2.function aaa(){...} f ...
- PowerShell自定义函数定义及调用
PowerShell是一种命令集,也有自己的语法定义及函数.本文主要介绍如何自定义powershell函数及如何调用,当初在写PowerShell自定义函数的时候查阅了很多资料都没找到如何调用自定义函 ...
随机推荐
- 使用aspx 直接生成excel
<%@ Page Language="C#" EnableEventValidation="false" ResponseEncoding="g ...
- flutter Dynamic updates 热更新 版本更新
比较新的解释 https://juejin.im/entry/5c85c959f265da2d881b5eb8 https://my.oschina.net/u/1464083/blog/297880 ...
- ejs常用功能函数
利用<%- include filename %>加载其他页面模版: 1.缓存功能,能够缓存已经解析好的html模版: 2.<% code %>用于执行其中javascript ...
- [524.A]2019-05-02(星期四)登顶梧桐山邀请
*** 看房活动召集 ***五一期间天气炎热, 除了登山活动, 还将组织看房活动.拥有一套自己的住房是很多深圳人的梦想.政府十三五期间计划供应人才住房和保障性住房35万套, 与需求相比仍很少, 排队的 ...
- Python 使用有道翻译
最近想将一些句子翻译成不同的语言,最开始想使用Python向有道发送请求包的方式进行翻译. 这种翻译方式可行,不过只能翻译默认语言,不能选定语言,于是我研究了一下如何构造请求参数,其中有两个参数最复杂 ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
- JavaWeb网上商城项目中用户注册,使用MailServer和FoxMail搭建本地邮件服务器
下载并安装易邮邮件服务器MailServer和腾讯邮箱FoxMail,下载地址 https://download.csdn.net/download/checkerror2/10130538 具体步 ...
- 记录近期面试题,面试总结 (从css - vue 全面面试题)
记录近期换工作时遇到的面试题和面试题答案 css 部分 盒模型 问题:说一下 css 的盒模型 盒模型分为标准模型和怪异盒模型(IE 盒模型) 标准盒模型:盒模型的宽高只是内容(content)的宽高 ...
- OpenVPN部署,实现访问云服务器的内网
本教程不描述如何FQ 一.OpenVPN服务端部署 $ yum -y install net-tools lzo lzo-devel openssl-devel pam-devel gcc gcc-c ...
- vue--transition-group
1.为什么要使用<transition-group> <transition></transition>是vue封装的过渡组件 <transition nam ...