Bash 基础知识:Bash中的函数

大多数编程语言都支持函数的概念。

函数帮助你避免在同一个程序中反复编写同一段代码。你只需将代码写为一个函数,然后在需要特定代码片段的地方使用这个函数。

在 Bash 基础知识系列的最后一章中,你将学习在 Bash 脚本中使用函数。

Bash 中的函数

下面是声明 Bash 函数的通用语法:

function_name {
    commands
}

只有在 “调用函数” 的脚本中,函数内的命令才会被执行。

这里有一个伪代码来演示这个情况:

function_name {
    commands
}

some_other_commands

# 函数调用
function_name argument;

🚧 函数定义必须在你调用函数之前。

让我们通过一个简单的例子来看看这个:

#!/bin/bash

fun {
    echo "This is a function"
}

echo "This is a script"
fun

当你运行脚本时,你应该看到这样的输出:

This is a script
This is a function

函数是在没有任何参数的情况下被调用的。接下来,让我们看看在 bash 中如何处理函数的参数。

向函数传递参数

向函数传递参数和向 Bash 脚本传递参数是一样的。你在调用函数时,可以在函数名旁边写上参数。

function_name argument;

让我们用一个例子来看看这个:

#!/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

如果你运行这个脚本,你会看到以下输出:

Let's use the sum function
The sum of 1 and 5 is: 6

请记住,传递给脚本的参数和传递给函数的参数是不同的。

在下面的例子中,我在调用函数时交换了参数。

#!/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

当你运行这个脚本时,你会看到这样的交换:

$ ./function.sh abhi shek
1st argument to script is abhi and 2nd is shek
1st argument to function is shek and 2nd is abhi

Bash 中的递归函数

一个递归函数会调用它自己。这就是递归的含义。这个梗图可能会帮助你理解它。

图片[1]-Bash 基础知识:Bash中的函数-不念博客

递归功能非常强大,可以帮助你编写复杂的程序。

让我们用一个计算阶乘的样本脚本来看看它的应用。如果你忘记了,阶乘的定义是这样的。

n 的阶乘:

(n!) = 1 * 2 * 3 * 4 *...  * n

所以,5 的阶乘是 1 * 2 * 3 * 4 * 5,计算结果是 120。

这是我用递归计算给定数字的阶乘的脚本。

#!/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。所以,如果你运行脚本并输入参数 5,它最终会返回 5 * 4 * 3 * 2 *1 的结果。

$ ./factorial.sh 5
Factorial of 5 is: 120

非常好。现在,让我们来做些练习吧。

🏋️ 练习时间

以下是一些示例编程挑战,用来帮助你实践你所学。

练习 1:写一个 Bash 脚本,使用一个名为 is_even的函数来检查给定的数字是否是偶数。

练习 2:类似的练习,你需要编写一个脚本,该脚本具有一个名为 is_prime的函数,并检查给定数字是否是质数。如果你还不知道,质数只能被 1 和它自身整除。

练习 3:编写一个生成给定数字的斐波那契序列的脚本。序列从 1 开始,脚本必须接受大于 3 的数字。

所以,如果你运行 fibonacci.sh 5,它应该输出 “1 1 2 3 5”。

© 版权声明
THE END
喜欢就支持一下吧
点赞83赞赏 分享
评论 抢沙发
头像
欢迎光临不念博客,留下您的想法和建议,祝您有愉快的一天~
提交
头像

昵称

取消
昵称

    暂无评论内容