Shell函数的定义和调用(附带实例)
在编辑脚本过程中,难免会遇到一些需要重复执行多次的代码段,为了更方便地执行重复代码段,我们可以将其定义成函数并设置一个函数名。
在定义函数之后,每当我们需要执行这段重复的代码时,只要标明函数名即表示执行函数中的全部代码。
使用函数可以让我们的脚本程序更加简洁,函数语法如下:
接下来,我们简单地进行一次函数定义和函数调用:
1) 在 /root/fun1.sh 脚本中我们定义了函数,表明函数名为 fun_test,函数名之前的 function 可以省略。函数体中只有一行 echo 命令,在实际定义函数的过程中,我们可以将 echo 命令替换为重复出现的代码段。
2) 函数如果只进行定义,那么函数体并不会被执行,在定义函数后每出现一次函数名,就表示要执行一次该函数中的代码段。因此,在定义函数结束后,fun_test 即为要执行的函数。
我们将重复出现的代码段定义成函数,并在需要执行该代码段的时候使用函数名来表示执行重复的代码段。那么在这种情况下,是否说明我们定义成函数的代码段就会一直一成不变地执行了呢?答案是否定的,我们仍然可以用类似于位置参数变量的方式将变量值传递到函数中。
接下来,我们编辑一个能够将变量值传递进脚本,并且能够将脚本中的值传递到函数中的脚本案例。还记得从 1 加到 100 这个循环吗?这次我们用函数来实现它,不过不再是从 1 加到 100 了,我们让用户自己来决定加到多少。
当函数写好之后,在使用时只要写入函数名即可调用,非常方便。如果在程序中需要多次调用同一项功能,那么定义函数可以优化程序代码。
在定义函数之后,每当我们需要执行这段重复的代码时,只要标明函数名即表示执行函数中的全部代码。
使用函数可以让我们的脚本程序更加简洁,函数语法如下:
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 代表函数的第二个参数,以此类推。
当函数写好之后,在使用时只要写入函数名即可调用,非常方便。如果在程序中需要多次调用同一项功能,那么定义函数可以优化程序代码。