Linux shell脚本 (十六)shell函数

shell函数

​ 函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。像其他编程语言一样,Shell 也支持函数。Shell 函数必须先定义后使用。

Shell 函数的定义格式如下:

function_name () {
    [commands]
    ...
    [ return value ]
}

如果你愿意,也可以在函数名前加上关键字 function:

function function_name () {
    [commands]
    ...
    [ return value ]
}

​ 函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。

​ Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。

​ 如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。

  • 先来看一个例子

#!/bin/bash
myfunc () {
   echo "hello world"
}
# Invoke your function
myfunc

运行结果:

$./test.sh
hello world
$

调用函数只需要给出函数名,不需要加括号。

19.1 函数返回值

#!/bin/bash
myfunc(){
   echo "hello world"
   return 5
}
myfunc
echo "myfunc return $?"

运行结果:

where@ubuntu:~$ ./test.sh 
hello world
myfunc return 5

函数返回值在调用该函数后通过 $? 来获得。

19.2 嵌套调用

#!/bin/bash
myfunc1 () {
   echo "myfunc1"
   myfunc2
}
myfunc2 () {
   echo "myfunc2"
}
myfunc1

运行结果:

where@ubuntu:~$ ./test.sh 
myfunc1
myfunc2

19.3 函数参数传递

#!/bin/bash
myfunc () {
   echo "myfunc $1 $2 $@"
}
myfunc

运行结果:

where@ubuntu:~$ ./test.sh 
myfunc 1 2 1 2 3

19.4 函数取消

​ 像删除变量一样,删除函数也可以使用 unset 命令,不过要加上 f 选项,如下所示:

unset f function_name

19.5 函数中的定义的变量

​ 在函数中定义的变量在整个shell脚本中都能使用。

#!/bin/bash
myfunc () {
   echo "myfunc"
   var=888
}
myfunc
echo $var

运行结果:

where@ubuntu:~$ ./test.sh 
myfunc
888

你可能感兴趣的:(Linux,shell)