(十一)shell函数详解(返回值,参数,定义,调用)

函数定义 与 调用

#函数定义
#标准
function fun1() {
        echo "one"
}

#省略括号
function fun2 {
        echo "two"
}

#省略关键字
fun3() {
        echo "$@"
}

#函数调用
#无参数
fun1
fun2

#有参数
fun3 10 30 70

  

函数返回值

 shell函数返回值表示的是退出状态, 0表示成功, 非0表示失败

那既然不能返回正常的值,改如何get到返回值呢?

  • 将得到的结果赋值给全局变量(除了local定义以外的变量都是全局的,即便在函数内部)
  • 在函数内部将结果输出,在函数外部使用$()  或 ··捕获
#获取全局
function fun1()
{
        num=99
}
fun1
echo $num
#获取局部
function fun2()
{
        local num=88
        echo "局部:$num"
}
fun2
echo $num #只能获得全局 不能同fun1一样用此方法

ret=$(fun2) #调用子函数
echo $ret #输出
#$? 表示函数的退出状态
function fun3()
{
        a=90
        return $a
}
fun3
echo $?

#全局变量
read num function fun4() {
for((i=$1; i<$2; i++));do ((num+=i)) #改变全局变量的值 done echo "显示fun4内部:$num, $?" #结果为0 return $? #$返回上一条命令的退出状态 } fun4 10 20 #调用 echo "num结果为: $num" #结束 157

#局部变量 read a function fun5() { local a
=22 for((i=$1; i<$2; i++)); do ((a+=i)) done echo "显示fun5内部: $a, $?" return $? } ret=$(fun5 1 2) echo "ret结果为: $ret"

结果:

10
显示fun4内部:155, 0
num结果为: 155
20
ret结果为: 显示fun5内部: 23, 0

 

函数参数

  •  定义函数时不能调用参数,如 fun1(x, y) 错误;
  •  调用函数时可以调用参数,如 fun1 10 20 正确;
  •  函数内部$n可以来接受参数,$1 $2 $3表示第n个参数;
  •  $#:参数个数
  •  $@ 和 $* :一次性获取所有的参数
function show()
{
        echo "第一个参数: $1"
        echo "参数个数: $#"
        n=$2
        for i in $@
        do
                ((n+=10))
                echo "第i个参数:$i"
        done
        echo $n
}

show 10 20 30

结果:

第一个参数: 10
参数个数: 3
第i个参数:10
第i个参数:20
第i个参数:30
50

做一个优秀的程序媛
原文地址:https://www.cnblogs.com/oytt/p/13495400.html