首页 > 编程笔记 > Linux笔记 阅读:13

Shell函数的定义和调用(附带实例)

在编辑脚本过程中,难免会遇到一些需要重复执行多次的代码段,为了更方便地执行重复代码段,我们可以将其定义成函数并设置一个函数名。

在定义函数之后,每当我们需要执行这段重复的代码时,只要标明函数名即表示执行函数中的全部代码。

使用函数可以让我们的脚本程序更加简洁,函数语法如下:
function 函数名()
{
    程序
}

接下来,我们简单地进行一次函数定义和函数调用:
[root@localhost ~]# cat /root/fun1.sh
#!/bin/bash
function fun_test()
# 定义函数,表明函数名为“fun_test”
{
    echo "function test!"
    # 函数体中只有一个echo命令,输出function test!字符串
}
# “}”表示函数定义结束,我们可以将所有重复执行的代码写到{ }之间
fun_test
# 调用函数
[root@localhost ~]# /root/fun1.sh
function test!
# fun_test运行后执行了函数体中的echo命令
解释一下脚本思路:
1) 在 /root/fun1.sh 脚本中我们定义了函数,表明函数名为 fun_test,函数名之前的 function 可以省略。函数体中只有一行 echo 命令,在实际定义函数的过程中,我们可以将 echo 命令替换为重复出现的代码段。

2) 函数如果只进行定义,那么函数体并不会被执行,在定义函数后每出现一次函数名,就表示要执行一次该函数中的代码段。因此,在定义函数结束后,fun_test 即为要执行的函数。

我们将重复出现的代码段定义成函数,并在需要执行该代码段的时候使用函数名来表示执行重复的代码段。那么在这种情况下,是否说明我们定义成函数的代码段就会一直一成不变地执行了呢?答案是否定的,我们仍然可以用类似于位置参数变量的方式将变量值传递到函数中。

接下来,我们编辑一个能够将变量值传递进脚本,并且能够将脚本中的值传递到函数中的脚本案例。还记得从 1 加到 100 这个循环吗?这次我们用函数来实现它,不过不再是从 1 加到 100 了,我们让用户自己来决定加到多少。
[root@localhost ~]# vim /root/function.sh
#!/bin/bash
# 接收用户输入的数字,然后从1加到这个数字
function sum()
# 定义函数名sum
{
    s=0
    for (( i=0; i<=$1; i=i+1 ))
    # 循环,直到变量i大于$1为止。$1是函数sum的第一个参数
    # 在函数中也可以使用位置参数变量,不过这里的$1指的是函数后的第一个参数
        do
            s=$(( $i+$s ))
        done
    echo "The sum of 1+2+3...+$1 is : $s"
    # 输出从1加到$1的和
}

read -p "Please input a number: " -t 30 num
# 接收用户输入的数字,并把值赋予变量num
y=$(echo $num | sed 's/[0-9]//g')
# 把变量num的值替换为空,并赋予变量y
if [ -z "$y" ]
# 判断变量y是否为空,以确定变量num中是否为数字
    then
        sum $num
        # 调用sum函数,并把变量num的值作为第一个参数传递给sum函数
    else
        echo "Error!! Please input a number!"
        # 如果变量num的值不是数字,就输出报错信息
fi
根据上述案例可以发现,函数也有自己的位置参数变量,$0 代表函数名,$1 代表函数的第一个参数,$2 代表函数的第二个参数,以此类推。

当函数写好之后,在使用时只要写入函数名即可调用,非常方便。如果在程序中需要多次调用同一项功能,那么定义函数可以优化程序代码。

相关文章