一、函数
1. 函数概述
函数是把相对独立的代码写在一起形成代码块,可以重复调用。通过函数,可以将一个较大的工程项目分为若干个小模块。
2. 函数语法
-
函数语法一
function 函数名 { # 执行的代码 } # 函数的调用 函数名
-
函数语法二
函数名 (){ # 执行的代码 } # 函数的调用 函数名
3. 函数返回值
在Shell脚本中,可以通过return来设置函数的返回值,返回函数的退出状态码。
return的使用原则:
- 函数一结束,就取返回值。
- return语句的范围是0~255,一旦超出范围就会除以256来取余。
return的意义是在函数的内部做控制流程,将最后的状态码告诉给调用者,告诉调用者函数的执行情况。调用者再根据函数的这些情况来选择后续代码的具体操作。return的返回值可以自定义,所以调用者可以根据不同的返回值来进行选择判断。
4. 函数传参
-
函数传参的语法
函数名 (){ # 执行的代码 } 函数名 参数
- 函数中要设置位置变量,根据调用函数时设置的参数来进行传参。
5. 函数的作用范围
- Shell脚本中定义的变量默认是全局变量(gobal),也就是在整个脚本环境中有效;从变量的定义声明开始,一直到脚本结束都有效,除非显式删除变量。
- 要想把变量的有效范围限制在函数里,那么需要使用local来定义声明局部变量。
- 如果gobal变量和local变量同名,local变量会优先于gobal变量,直至函数结束。
- 函数只在当前脚本环境中有效,也就是函数的声明和调用要在同一个文件。
6. 函数的递归
递归就是在一个函数当中调用函数本身。函数主要作用就是实现某一功能的代码的重复利用,函数递归也是如此。主要用于解决有着与其相似子问题的问题。问题的规模会不断减小,直到一个问题的基本情况,这个问题可以直接解决,而不用进一步递归。
函数递归主要分为基本代码部分和递归代码部分。基本部分是递归的终止条件,当符合某个条件时候,就会直接输出或返回某值而不递归调用;递归部分也就是调用函数自身,函数的输入会逐渐接近基本条件,直到符合基本条件终止递归。
计算阶乘,就是一个典型的函数递归。
#! /bin/bash
func1 ()
{
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$(($1 - 1))
local result=$(func1 $temp)
echo "$(($1 * result))"
fi
}
read -p "请输入一个数字:" num
func1 $num