shell函数详解
华子目录
- 函数定义
- 说明
- 函数调用
- 函数变量
- 全局变量
- 局部变量(使用`local`声明)
- 函数传参
- 函数返回值
- 获取返回值
函数定义
linux shell
可以用户定义函数
,然后在shell脚本
中可以随便调用。Shell函数
定义的语法格式如下:
- 标准写法:
function 函数名(){
函数体
}
- 简写(省略
function
)
函数名(){
函数体
}
- 还有另一种写法(省略了
()
)
function 函数名{
函数体
}
说明
function
是Shell
中的关键字
,专门用来定义函数
函数调用
- 调用
shell
中的函数
时,直接写函数名
就可以
函数变量
全局变量
全局变量
可以定义在脚本
中,也可以定义在函数
中作用范围
:从定义
的开始
处到shell脚本执行结束
定义在函数外部
[root@shell ~]# cat shell1.sh
#!/bin/bash
func() #定义函数
{
echo ${v1}
v1=200
}
v1=100
func #调用函数
echo ${v1}
[root@shell ~]# chmod +x shell1.sh
[root@shell ~]# bash shell1.sh
100
200
定义在函数内部
[root@shell ~]# cat shell1.sh
#!/bin/bash
func() #定义函数
{
v1=200
}
func #调用函数
echo ${v1}
[root@shell ~]# bash shell1.sh
200
局部变量(使用local
声明)
范围更小
,仅限于某个程序段
中,如:函数
,- 通过
local
关键字定义
在函数
中定义局部变量
[root@shell ~]# cat shell1.sh
#!/bin/bash
func() #定义函数
{
local v1=200 #定义局部变量
}
func #调用函数
echo ${v1}
[root@shell ~]# bash shell1.sh
#我们执行后发现没有任何输出
函数传参
- 和其它
编程语言
不同的是,Shell函数
在定义时不能指明参数
,但是在调用
时却可以传递参数
- 在函数体
内部
,函数中的变量
均为全局变量
函数调用
时传参
[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
}
func 1 2 3 #调用时传参
[root@shell ~]# bash shell1.sh
第一个参数:1
第二个参数:2
第三个参数:3
脚本执行
时传参
- 如果是
脚本执行
时传参
,$1 $2 $3
等位置参数
必须定义在函数的外部
[root@shell ~]# cat shell1.sh
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
[root@shell ~]# bash shell1.sh 1 2 3
第一个参数:1
第二个参数:2
第三个参数:3
- 那么如果定义在
函数内部
会怎样呢,我们一起来测试一下
[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
}
func
#我们发现定义在函数内部,不能在脚本执行时传参
[root@shell ~]# bash shell1.sh 1 2 3
第一个参数:
第二个参数:
第三个参数:
函数返回值
Shell函数
的返回值
,可以通过return语句
返回,但是shell函数
只能返回整数
。用来表示函数执行成功与否
,0
表示成功
,其他值
表示失败
。
获取返回值
通过echo $?
来获取函数的返回值
[root@shell ~]# cat shell1.sh
#!/bin/bash
func()
{
echo "hello world"
return 2
}
func
echo $?
[root@shell ~]# bash shell1.sh
hello world
2 #获取了返回值2