变量是被我们赋予一个值来使用,函数就像一个快捷键一样,当我们定义函数后,只要引用其对应的函数名,就可以使用我们设置好的功能
代码如下:
#!/bin/bash
function functionname(){
##function可以不写,functionname
是这个函数的名字,使用时就是引用这个名字
echo "haha"
echo "heihei"
echo "hello"
}
##函数定义格式 function functionname(){
},花括号里输入我们需要的命令
##小括号里不需要写东西
functionname ##调用函数,注意调用函数一定要在函数定义
后才可以
试着去执行这个脚本
[root@haha ~]# sh test.sh
haha
heihei
hello
我们可以看到,多条命令通过调用函数名,就达到了想要的效果
默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态
#!/bin/bash
function functionname(){
echo "haha"
echo "heihei"
echo "hello"
ls -l inexistent.txt ##查看一个不存在的文件
}
functionname
echo "function's status:$?"
执行这个脚本
[root@haha ~]# sh test.sh
haha
heihei
hello
ls: cannot access inexistent.txt: No such file or directory
function's status:2
我们可以看到函数执行成功三条命令,最后一条命令报错,状态值非0
调换函数中命令的位置
#!/bin/bash
function functionname(){
ls -l inexistent.txt
echo "haha"
echo "heihei"
echo "hello"
}
functionname
echo "function's status:$?"
再去执行脚本
[root@haha ~]# sh test.sh
ls: cannot access inexistent.txt: No such file or directory
haha
heihei
hello
function's status:0
调换位置后,状态值为0,所以说默认情况下,函数的退出状态是函数的最后一条命令返回的退出状态
return 是 Shell 关键字,专门用在函数中返回一个值
#!/bin/bash
function functionname(){
echo "haha"
echo "heihei"
echo "hello"
return 111 ##试着用下return
ls -l inexistent.txt
}
functionname
echo "function's status:$?"
[root@haha ~]# sh test.sh
haha
heihei
hello
function's status:111
验证return后,不难看出return不仅返回了一个退出值给调用函数的程序,还退出了函数执行,ls的错误信息没有显示,就说明它没有被执行
#!/bin/bash
functionname(){
read -p "input a value:" VAR
echo $[$VAR * 5]
}
NUM=$(functionname) ##将函数赋值给变量
echo "current num is $NUM" ##打印这个变量
[root@haha ~]# sh test.sh
input a value:3
current num is 15
第一种情况:在脚本内部传参
#!/bin/bash
functionname() {
if [ $# -eq 0 ] || [ $# -gt 2 ]
then
echo "错误,需要一个或者两个位置参数"
elif [ $# -eq 1 ]
then
echo $[ $1 + $1 ]
else
echo $[ $1 + $2 ]
fi
}
echo -n "用两个参数的结果是:"
value=`functionname 100 200` ##在脚本中用类似输入位置变量的形式
对函数functionname传递参数
echo $value
echo -n "用一个参数的结果是: "
value=`functionname 100`
echo $value
echo -n "没有参数的结果是:"
value=`functionname`
echo $value
echo -n "用三个参数的结果是:"
value=`functionname 100 200 300`
echo $value
[root@haha ~]# sh test.sh
用两个参数的结果是:300
用一个参数的结果是: 200
没有参数的结果是:错误,需要一个或者两个位置参数
用三个参数的结果是:错误,需要一个或者两个位置参数
第二种情况:以位置变量的形式手动传参
#!/bin/bash
functionname(){
echo $[ $1 * $2 ] ##这里的$1,$2引用脚本中的位置参数
echo $3
}
if [ $# -eq 2 ]
then
value=`functionname $1 $2 haha` ##这里的$1$2引用外面的位置
参数 ,haha传给函数中的$3
echo "The result is $value"
else
echo "Usage:$0 a b"
fi
[root@haha ~]# sh test.sh
Usage:test.sh a b
[root@haha ~]# sh test.sh 3
Usage:test.sh a b
[root@haha ~]# sh test.sh 3 6
The result is 18
haha
函数的引用,可以使我们在复杂的脚本中以简洁、美观的语言,达到我们需要的脚本效果