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

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"               

3、输出结果

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值