Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

更新时间:2023-07-08 14:27:53 阅读: 评论:0

Shell函数(函数定义、函数变量、函数调⽤、函数传参、函数
返回值、获取函数返回值)
分享知识传递快乐
1、函数定义
四级考试流程linux shell 可以⽤户定义函数,然后在shell脚本中可以随便调⽤。Shell 函数定义的语法格式如下:
[function] funname [()]{
函数体
[return int;]
}
形容鱼的成语格式1:
简化写法,不写 function 关键字:
函数名(){
函数体
}
格式2:
这是标准写法,也推荐⼤家使⽤的写法:
function 函数名(){
命令序列
}
这样⽅便做到⼀看就懂。
格式3:
如果写了 function 关键字,也可以省略函数名后⾯的⼩括号:
function 函数名{
命令序列
}
说明:
function 是 Shell 中的关键字,专门⽤来定义函数;可以带function funname () 定义,也可以直接funname () 定义,不带任何参数;
funname 是函数名;
函数体 是函数要执⾏的代码,也就是⼀组语句;
return int 表⽰函数的返回值,其中 return 是 Shell 关键字,专门⽤在函数中返回⼀个值;这⼀部分可以写也可以不写,如果不加,将以最后⼀条命令运⾏结果,作为返回值。
2、函数变量
Shell 函数的变量不像其它语⾔中需要在变量前定义变量类型什么的,更没有结果符号等。语法:
num=1
变量作⽤域
局部变量:作⽤域是函数的⽣命周期;在函数结束时被⾃动销毁。定义局部变量的⽅法:
local VAR=VALUE
本地变量:作⽤域是运⾏脚本的shell进程的⽣命周期;因此,其作⽤范围为当前shell
⽰例⼀:
#!/bin/bash
#在函数外定义本地变量
var="Hello,World"
function show() {
#在函数内改变变量内容
认识线段教学反思
var="Hi,var is changed"
}
echo "$var"
show
echo "$var"
输出结果:
[guest@localhost shell]$ ./tempsh.sh
Hello,World
Hi,var is changed
结果显⽰在调⽤函数后,原有的本地变量var被替换了。还好这个变量并不是重要的部分,想想若是PATH被替换了,那么这个函数的罪过就⼤了。因此我们如何即调⽤函数中定义的变量同时⼜不对本地变量造成任何影响呢?局部变量的出现就是为了解决这个问题。
下⾯看看在使⽤了局部变量后的效果。
#!/bin/bash
#在函数外定义本地变量
var="Hello,World"
香包制作
function show() {
#在函数内改变变量内容
local var="Hi,var is changed"
echo "$var"
}
echo "$var"
show
echo "$var"
输出结果
[guest@localhost shell]$ ./tempsh.sh
Hello,World
Hi,var is changed
Hello,World
该实验结果说明,使⽤局部变量后,函数体中出现的变量作⽤范围只存在于当前函数⽣命周期。
3、函数调⽤
定义函数的代码段不会⾃动执⾏,⽽是在调⽤时执⾏;在函数定义好后,⽤户可以在shell 中直接调⽤,调⽤时不⽤带上();调⽤ Shell 函数时可以给它传递参数,也可以不传递。如果不传递参数,直接给出函数名字即可。
⽰例⼀:
#!/bin/bash
# 函数定义
function show(){
echo "Hello word"
}
# 函数调⽤
show
输出结果:
Hello word
函数调⽤成功。上边的例⼦是把函数把在脚本上边,那么如果放函数放在下边会怎样呢?
⽆⾮就两种结果:1成功,2失败
下⾯我们举例测试⼀下:
⽰例⼆:
#!/bin/bash
在线翻译拼音
乡村田园# 函数调⽤
show
#函数定义
function show(){
echo "Hello word"
}
输出结果:
./tempsh.sh:⾏4: show: 未找到命令
阿根廷英语
系统报错,为啥?为什么会报错呢?
⾸先,脚本的执⾏顺序是从上到下顺序执⾏的,因此会先执⾏show,通过定义的环境变量$PATH定义的路径找不到show对应的命令因此报“show:未找到命令”。
我们在终端命令⾏中输错命令报错也是这个原因。终端命令⾏默认会将最左⾯输⼊的内容当做命令,因此若是错误的命令,不是命令的命令等内容都会报错。
通过上⾯的对⽐,我们⾄少知道函数的调⽤若是在同⼀个脚本中,调⽤操作需要在定义的函数后⾯。
4、函数传参
函数传参调⽤语法:
函数名参数1 参数2 ....
如果传递参数,那么多个参数之间以空格分隔:
funname param1 param2 param3
不管是哪种形式,函数名字后⾯都不需要带括号。和其它编程语⾔不同的是,Shell 函数在定义时不能
指明参数,但是在调⽤时却可以传递参数,并且给它传递什么参数它就接收什么参数。
在Shell中,调⽤函数时可以向其传递参数。在函数体内部,函数中的变量均为全局变量,没有局部变量,若使⽤局部变量需要在变量前加上 local,通过 $n 的形式来获取参数的值,例如,$1表⽰第⼀个参数,$2表⽰第⼆个参数....
⽰例:
#!/bin/bash
function show(){
echo "第⼀个参数为 $1 !"
echo "第⼆个参数为 $2 !"
echo "第⼗个参数为 $10 !"
echo "第⼗个参数为 ${10} !"
echo "第⼗⼀个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为⼀个字符串输出所有参数 $* !"
}
show 0 1 2 3 4 5 6 7 8 9 10 11
输出结果:
第⼀个参数为 0
第⼆个参数为 1
第⼗个参数为 10
第⼗个参数为 9
第⼗⼀个参数为 10
参数总数有 12 个
作为⼀个字符串输出所有参数 0 1 2 3 4 5 6 7 8 9 10 11
注意:$10 不能获取第⼗个参数,获取第⼗个参数需要${10}。当n>=10时,需要使⽤${n}来获取参数。
另外,还有⼏个特殊字符⽤来处理参数:
参数处理说明
$#传递到脚本的参数个数
$*以⼀个单字符串显⽰所有向脚本传递的参数
$$脚本运⾏的当前进程ID号
$!后台运⾏的最后⼀个进程的ID号
$@与$*相同,但是使⽤时加引号,并在引号中返回每个参数。
$-显⽰Shell使⽤的当前选项,与t命令功能相同。
$?显⽰最后命令的退出状态。0表⽰没有错误,其他任何值表明有错误。
5、函数返回值
退出状态码
在介绍函数返回值前先了解⼀下跟函数返回值有关的状态退出码。
Shell 中运⾏的每个命令都使⽤退出状态码(exit status)来告诉shell它完成了处理。退出状态码是⼀个0-255之间的整数值,在命令结束运⾏时由命令传给shell。你可以捕获这个值并在脚本中使⽤。
如何查看退出状态码呢?
Linux提供了 $? 专属变量来保存上个执⾏的命令的退出状态码。你必须在你要查看的命令之后马上查看或使⽤ $? 变量。它的值会变成Shell中执⾏的最后⼀条命令的退出状态码。
退出状态码⼤体分两种:
⼀种是命令正确执⾏的状态码,该状态码为:0
⼀种是命令错误执⾏的状态码,为1-255
Linux退出状态码
状态码描述
0命令成功结束
1通⽤未知错误
2误⽤shell命令
126命令不可执⾏
127没找到命令
128⽆效退出参数
128+x Linux信号x的严重错误
130命令通过Ctrl+C终⽌
255退出状态码越界怎么做咖喱饭
在脚本中也可以指定退出状态码的值,通过命令exit实现。
状态码取值范围为0-255,如果在指定的状态码⼤于255,那么shell会通过模(模就是256)运算得到相应的退出状态码。
⽰例⼀:
成功的

本文发布于:2023-07-08 14:27:53,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1085640.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   命令   参数   变量   定义   状态   退出   传递
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图