Abigger=1
Bbigger=2
Equal=3
bigger()
{
if [ $1 -eq $2 ]
then
return $Equal #返回值是return,不能用exit,如果用exit将在这里退出
elif [ $1 -gt $2 ]
then
return $Abigger
else
return $Bbigger
fi
}
bigger 35 34
case $? in # $?是上条指令执行的状态,就是调用函数的返回值。
"1")
echo "A is bigger";;
"2")
echo "B is bigger";;
"3")
echo "two number is equal";;
*)
echo "error"
esac
注意在调用函数和使用变量之间不能有其他命令,否则$?就会被改变成最新一条命令的返回值。
想要返回字符串或可以使用一个函数之外定义的变量或数组来传递返回结果。修改之后的脚本如下:
#!/bin/bash
RESULT=null
bigger()
{
if [ $1 -eq $2 ]
then
RESULT="equal"
elif [ $1 -gt $2 ]
then
RESULT="A is bigger"
else
RESULT="B is bigger"
fi
}
bigger 35 34
echo "the result is : $RESULT"
利用echo模拟函数返回值:
multi()
{
local temp #局部变量,只在multi函数里面有用
let temp=$1*$2
echo $temp #不会打印到标准输出,因为调用时会作为变量的值。可返回数字字符串等类型。
}
result=`multi 15 5` #命令替换(command substitution)
echo "15 * 5 = $result"
exit 0
函数的变量作用范围:
#!/bin/bash
func()
{
nomal_var=33
local local_var=99 #以local声明的局部变量,只能在函数内可见
echo "local_var inside the function,local_var=$local_var"
}
echo "without calling the function,nomal_var=$nomal_var" #函数未被调用,nomal_var=
echo "call func"
func
echo "after calling the function,nomal_var=$nomal_var" #函数调用之后变量可见,nomal_var=33
echo "local_var outside the function, local_var=$local_var" # local_var=