欢迎,来自IP地址为:98.80.143.34 的朋友
学习使用函数,也是本次 Bash 基础的最后一节内容。
多数编程语言都具有函数的概念,函数帮助我们避免多次书写重复代码。一旦将一段代码定义为函数,再次需要使用相同功能的代码时,就不需要再次书写同样代码,只需要调用函数即可。
Bash 使用函数
函数定义的格式如下所示:
function_name() { commands }
函数体中的”commands”将在脚本中调用函数时执行,定义时不会执行。
以下是一段比较完整的格式,包括函数的定义与调用:
function_name() { commands } some_other_commands #FUNCTION CALL function_name argument;
需要强调的是,函数在调用之前,必须已经定义完成。
我们编写一段简单的代码来演示函数的调用:
#!/usr/bin/bash fun() { echo "This is a function" } echo "This is a script" fun
可以看到,脚本首先执行脚本中的语句,而会在调用函数时才执行函数定义中的命令。
这个函数并未接收任何参数,而 Bash 脚本中定义的函数是支持参数传递的。
函数传递参数
给函数传递参数的形式同给脚本传递参数的形式一致,调用时使用函数名后接参数值形式:
function_name argument;
示例脚本如下所示:
#!/usr/bin/bash sum() { sum=$(($1+$2)) echo "The sum of $1 and $2 is: $sum" } echo "Let's use the sum function" sum 1 5
时刻要牢记,传递给脚本的参数同传递给函数的参数是两回事,虽然函数也可以使用脚本的参数,典型示例如下:
#!/usr/bin/bash arg() { echo "1st argument to function is $1 and 2nd is $2" } echo "1st argument to script is $1 and 2nd is $2" arg $2 $1
Bash 函数递归调用
所谓递归调用,是指函数调用函数本身。递归调用功能非常强大,可以让我们写出非常精简的代码。
典型的递归例子是求整数的阶乘,因为 n 的阶乘是 n*(n-1的阶乘),而n-1的阶乘又等于(n-1)(n-2的阶乘),以此类推,就终可以求到1的阶乘为1,从而结束递归。
让我们尝试使用递归来编写一个计算阶乘的脚本:
#!/usr/bin/bash factorial() { if [ $1 -gt 1 ]; then echo $(( $1 * $(factorial $(( $1 -1 ))) )) else echo 1 fi } echo -n "Factorial of $1 is: " factorial $1
注意这段代码”echo $(( $1 * $(factorial $(( $1 -1 ))) ))”,代码调用了函数自身,直到1结束,代码会首先计算1的阶乘直到得到正确结果。
脚本执行结果如下:
通过本系列的基本知识的学习,相信大家对于 Bash 脚本有了一定的认识。事实上 bash acel博大精深,可以参考 >>官方手册<< 深入了解。
One thought on “Bash 基础(九):Bash 使用函数”