shell脚本之函数

一、函数概念及格式

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 $? 

三、函数传参

函数也是有参数的,它的内置变量与shell脚本很类似,函数名称代表示$0,而后续的变量也是以$1、$2…来替换的

1、实例操作一

1.1格式

#!/bin/bash
sum() {
   echo "第一个位置参数为$1"
   echo "第二个位置参数为$2"
   sum1=`echo "$s1+$s2" | bc`
   echo $sum1
}
 
 read -p "请输入第一个参数:" num1
 read -p "请输入第二个参数:" num2
 
sum $num1 $num2 

1.2输出结果

四、函数变量的作用范围

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 tmp=$[$1-1]
 local res=$(fact $tmp)
echo $[$1 * $res]
fi
}

read -p "请输入计算阶乘的数字:" num
res=$(fact $num)
echo $res

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"        

3、输出结果

posted @ 2022-10-24 19:13  龙Llong  阅读(89)  评论(0编辑  收藏  举报