函数的语法
有两种格式可以用来在shell脚本中创建函数,第一种格式采用关键字function,后跟分配给该代码块的函数名
name 属性定义了赋予函数的唯一名称,脚本中定义的每个函数都必须有一个唯一的名称
function name {
commands
}
或者
name() {
commands
}
实现函数
[root@linux /]# vim xxx.sh
#!/bin/bash
function www {
echo "Hello world"
}
www
[root@linux /]# sh xxx.sh
Hello world
调用函数
[root@linux /]# vim xxx.sh
#!/bin/bash
function we() {
echo "Hello world"
}
www=1
while [ $www -le 3 ]
do
we # 调用函数
www=$[ $www + 1 ]
done
[root@linux /]# sh xxx.sh
Hello world
Hello world
Hello world
函数传参
函数传参调用语法:
函数名 参数1 参数2 ....
[root@linux /]# vim xxx.sh
#!/bin/bash
function www(){
echo "第一个参数是 $1"
echo "第二个参数是 $2"
echo "第一个参数为 $3"
}
www $1 $2 $3
[root@linux /]# sh xxx.sh 10 20 30
第一个参数是 10
第二个参数是 20
第一个参数为 30
返回值
默认退出状态码
默认情况下,函数的退出状态码就是函数最后一条命令的返回的退出状态码,用 $? 查看
[root@linux /]# vim xxx.sh
#!/bin/bash
function www(){
echo "Helo world"
}
www
echo $?
[root@linux /]# sh xxx.sh
Helo world
0
使用return命令(返回函数特定状态码)
[root@linux /]# vim xxx.sh
#!/bin/bash
function www(){
echo "Helo world"
return 3
}
www
echo $
[root@linux /]# sh xxx.sh
Helo world
3
把函数值赋给变量使用
[root@linux /]# vim xxx.sh
#!/bin/bash
function www() {
read -p "输入一个数值:" value
echo $[ $value * 2 ]
}
we=`www`
echo "目前的数值是$we"
[root@linux /]# sh xxx.sh
输入一个数值:2
目前的数值是4
函数中使用变量
[root@linux /]# vim xxx.sh
#!/bin/bash
a=$1
b=$2
function www() {
echo $[a + b]
}
www
[root@linux /]# sh xxx.sh 10 11
21
变量的作用域
Shell 变量的作用域可以分为三种:
全局变量:在当前shell中任何地方使用的变量
局部变量:只能在函数内使用的变量
环境变量:可以在任何shell中使用的变量
全局变量
任何地方都生效的变量,默认情况下,脚本主体内定义全局变量,函数内可以用,函数外也可以
[root@linux /]# vim xxx.sh
#!/bin/bash
function www(){
xxx=$[a+b]
}
read -p "输入第一个数值:" a
read -p "输入第二个数值:" b
www
echo "两个数值相加等于:$xxx"
[root@linux /]# sh xxx.sh
输入第一个数值:10
输入第二个数值:11
两个数值相加等于:21
局部变量
shell中支持自定义函数,与其他语言不同的是,shell中定义的变量默认也是全局变量,在函数外一样可以调用,想要定义局部变量,需要在定义时在变量名前加上local命令,这样定义的变量就是局部变量,函数外就不能访问了
[root@linux /]# vim xxx.sh
#!/bin/bash
function www(){
local xxx="Hello wolrd"
echo $xxx
}
www
[root@linux /]# sh xxx.sh
Hello wolrd