shell函数的参数与返回值的例子

#!/bin/bash
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模拟函数返回值:

#!/bin/bash
multi()
{
        local temp           #局部变量,只在multi函数里面有用
        let temp=$1*$2
        echo $temp        #不会打印到标准输出,因为调用时会作为变量的值。可返回数字字符串等类型。
}
result=`multi 15 5`      #命令替换(command substitution)
echo "15 * 5 = $result"
exit 0



函数的变量作用范围:

函数外定义的变量,函数内可以使用和修改,修改会影响到函数外;
函数内定义的变量(没有使用loacal),函数外可以使用和修改,修改会影响到函数外。在函数未被调用之前,函数体内定义的变量在函数之外不能被看见。

#!/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=

你可能感兴趣的:(shell)