Shell函数定义

函数基本定义

函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。
Shell脚本是从顶部开始执行,即从上而下执行,Shell 函数必须先定义后使用。
在Shell中,所有的函数定义都是平行的,既不允许在函数体内再定义其他函数,但允许函数之间的相互调用。

Shell函数的基本定义格式:

function_name () {
    command1
    command2
    ......
    commandn
    [ return value ]
}

带关键词function的函数定义:

function function_name () {
    command1
    command2
    ......
    commandn
    [ return value ]
}

定义解析说明:

  • 标题为函数名,函数体内是函数内的命令集合。
  • 在编写脚本是要注意函数名应该唯一,如果不唯一,脚本执行会产生错误。
  • 函数名前的关键词function在加上和省略对脚本的最终执行不产生任何影响。
  • 函数体内的命令集合必须含有至少一条命令,不允许空命令。
  • 函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。
  • 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。
  • 如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”。
  • 如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值。

示例1:简单的一个函数调用

#!/bin/bash

#定义一个简单函数hello
hello() {
  echo "Hello yanfadi!"
}

#调用hello函数
hello

脚本运行结果如下:

$./test.sh
Hello yanfadi!
$

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

示例2:带有return语句的函数

#!/bin/bash

#定义一个带return的函数
funWithReturn() {
  echo -n "Input first number:"
  read num1
  echo -n "Input second number:"
  read num2
  echo "The two numbers are $num1 and $num2 !"
  return $(($num1+$num2))
}

#调用funWithReturn函数
funWithReturn
ret=$?
echo "The sum of two numbers is $ret !"

脚本运行结果如下:

Input first number:10
Input second number:20
The two numbers are 10 and 20 !
The sum of two numbers is 30 !

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

示例3:函数嵌套

#!/bin/bash

#函数1
number_one() {
  echo "Hello yanfadi!"
  function_two
}

#函数2
function_two() {
  echo "Hello world!"
}

#调用函数1
number_one

脚本运行结果如下:

Hello yanfadi!
Hello world!