一、函数概念及格式
1、函数的概念
函数定义:封装的可重复利用的具有特定功能的代码
函数就是可以在shell脚本当中做出一个类似自定义执行的命令的东西,最大的功能就是简化我们很多的代码。
- 将命令序列按照格式书写在一起
- 可方便重复使用命令序列
2、函数的格式
2.1 格式一
[function] 函数名 (){
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
2.2 格式二
函数名(){
命令序列
}
二、函数的返回值
1、return的作用
返回函数结果
语法为:return+表达式
语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果。return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值, 由return后面的参数指定。return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!
使用原则:
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
退出状态码必须是0~255,超出时值将为除以256取余
2、实例操作一:return返回值
2.1 格式
#!/bin/bash
function test1 {
read -p "请输入一个值:" value
return $[$value * 2]
}
test1 #调用函数
echo $?
2.2 运行结果
三.函数传参
函数也是有参数的,它的内置变量与shell脚本很类似,函数名称代表示$0,而后续的变量也是以$1、$2…来替换的
1、实例操作一
1.1、格式
#!/bin/bash
sum() {
echo "第一个位置参数为$1"
echo "第二个位置参数为$2"
sum1=$[$1 + $2]
echo $sum1
}
read -p "请输入第一个参数:" first
read -p "请输入第二个参数:" second
sum $first $second
2.1、输出结果
四、函数变量的作用范围
1、概念
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
2、实例操作
2.1 格式
#!/bin/bash
func () {
local i=10
echo $i
}
func
echo $i
2.2 输出结果
五、函数的递归
函数调用自己本身的函数
1、函数的递归应用:阶乘
阶乘(factorial)是基斯顿·卡曼(Christian Kramp, 1760 – 1826)于1808年发明的运算符号。
阶乘,也是数学里的一种术语。
阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。
例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。 例如所要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。
在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!
阶乘一般很难计算,因为积都很大。
1.1 格式
#!/bin/bash
fact () {
if [ $1 -eq 1 ];then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
read -p "请输入一个阶乘的数字:" n
result=$(fact $n) #该值跟local result 不同
echo "$n的阶乘结果是 $result"
1.2 实例操作
六、创建函数库
1、创建函数库格式
#!/bin/bash
fact () {
if [ $1 -eq 1 ];then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
addition () {
echo $[$1 + $2]
}
subtraction () {
echo $[$1 - $2]
}
multiplication () {
echo $[$1 * $2]
}
division () {
if [ $2 -ne 0 ];then
echo $[$1 / $2]
else
echo "被除数不能为0"
fi
}
2、调用函数脚本格式
. /root/demoq9.sh
value1=$1
value2=$2
result1=$(addition $value1 $value2)
result2=$(subtraction $value1 $value2)
result3=$(multiplication $value1 $value2)
result4=$(division $value1 $value2)
result5=$(fact $value1)
echo "加法的结果为 $result1"
echo "减法的结果为 $result2"
echo "乘法的结果为 $result3"
echo "除法的结果为 $result4"
echo "$value1的阶乘结果为 $result5"