函数在任何编程语言中都起着重要的作用。 像许多真正的编程语言一样,bash具有用于有限实现的函数。
了解Linux Shell脚本函数
什么是功能?
在编程中,函数是执行特定任务的程序的命名段。 在这个意义上,函数是一种过程或例程。 当调用函数时,程序离开当前代码段,并开始执行函数内的第一行。 每当有重复代码或任务重复时,请考虑使用函数。
例如,考虑我们需要在特定程序的几个阶段找到数字的阶乘的情况。 不是每次都编写整个代码(用于计算阶乘),而是可以编写代码的一部分,该代码在块中计算阶乘,并在多个场合重复使用。
为什么我们写函数?
- 它帮助我们重用代码。
- 提高程序的可读性。
- 在程序中有效地使用变量。
- 允许我们按部分测试程序。
- 将程序显示为一系列子步骤。
shell脚本中的函数
在shell脚本中编写函数的一般语法包括以下方法。
function func_name { . . . commands . . . } or func_name ( ) { . . . commands . . . } Opening curly braces can also be used in the second line as well. func_name ( ) { . . . commands . . . }
您可以随时在这些功能块中编写有效的命令,正如我们在shell脚本中所做的那样。 现在让我们尝试写一个简单的脚本,其中有一个小函数。
#!/bin/bash call_echo ( ) { echo ‘This is inside function’ } op=$1 if [ $# -ne 1 ]; then echo "Usage: $0 <1/0>" else if [ $1 = 0 ] ; then echo ‘This is outside function’ elif [ $1 = 1 ] ; then call_echo else echo ‘Invalid argument’ fi fi exit 0
函数定义必须在对它的第一次调用之前。 在调用它之前没有什么像“声明函数”。 我们可以总是在函数内嵌套函数。
注 : -编写空函数总是会导致语法错误。
当相同的函数被定义多次时,最终版本是被调用的。 让我们举个例子。
#!/bin/bash func_same ( ) { echo ‘First definition’ } func_same ( ) { echo ‘Second definition’ } func_same exit 0
接受参数和返回值的函数
让我们通过考虑函数接受参数和返回值来更深入。 要从函数返回一个值,我们使用'return'shell内置函数。 语法如下。
func_name ( ) { . . . commands . . . return $ret_val }
类似地,我们可以将参数传递给用空格分隔的函数,如下所示。
func_name $arg_1 $arg_2 $arg_3
在函数内部,我们可以按照$ 1,$ 2,$ 3等顺序访问参数。 看下面的示例脚本,找到最多两个整数,使用函数添加更多的清晰度。
#!/bin/bash USG_ERR=7 max_two ( ) { if [ "$1" -eq "$2" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then echo $1 else echo $2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 x if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 else err_str fi else err_str fi exit 0
上面看起来有点复杂,但很简单,如果我们通过线阅读。 第一个嵌套if-else如果行用于验证目的,即在正则表达式的帮助下检查参数的数量和类型。 之后,我们使用两个命令行参数调用该函数,并在其中显示结果。 这是因为我们不能从函数返回大整数。 解决这个问题的另一种方法是使用全局变量来存储结果内部函数。 下面的脚本解释了这种方法。
#!/bin/bash USG_ERR=7 ret_val= max_two ( ) { if [ "$1" -eq "$2" ] ; then echo 'Equal' exit 0 elif [ "$1" -gt "$2" ] ; then ret_val=$1 else ret_val=$2 fi } err_str ( ) { echo "Usage: $0 <number1> <number2>" exit $USG_ERR } NUM_1=$1 NUM_2=$2 if [ $# -ne 2 ] ; then err_str elif [ `expr $NUM_1 : '[0-9]*'` -eq ${#NUM_1} ] ; then if [ `expr $NUM_2 : '[0-9]*'` -eq ${#NUM_2} ] ; then max_two $NUM_1 $NUM_2 echo $ret_val else err_str fi else err_str fi exit 0
现在尝试一些激动人心的问题,在以前的shell脚本系列中使用如下功能解释。
- 了解基本的Linux Shell脚本语言提示 - 第一部分
- 5 Shell脚本Linux新手学习Shell编程 - 第二部分
- 航行通过Linux的世界BASH脚本 - 第三部分
- Linux Shell编程的数学方面 - 第四部分
- 计算Shell脚本语言中的数学表达式 - 第五部分
我将回到更多的洞察功能功能,如使用局部变量,递归等在下一部分。 保持更新评论。