Shell函数的介绍和操作命令

10 篇文章 1 订阅
1 篇文章 0 订阅

Shell函数的概述

将命令序列按格式写在一起

方便重复使用命令序列

Shell函数定义

shell函数定义有两种方法:

function 函数名  {
	   命令序列
	  return x     使用return或exit可以显式地结束函数
}
函数名 () {
	命令序列
}

调用函数的方法

函数名  参数1   参数2

实验操作

编写yum源仓库脚本文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

函数返回值

return表示退出函数并返回一个退出值,脚本中可以用 $ ?变量显示该值

使用原则:

1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码

2、退出状态码必须是0~255,超出时值将为除以256取余

操作命令

function 函数名 {
read -p "请输入: "aa
return $[$aa * 2]
}
函数名(进行调用)
echo $?
函数名() {
read -P "请输入:”aa
echo $[$aa * 2]
}
result-“函数名”
echo $result

实验操作

一、命令一操作

编写一个函数脚本
在这里插入图片描述
输入数字取返回码
在这里插入图片描述
这里可以看到返回值不是输入的数乘以2了,因为返回值的范围是0~255,超过时需要除以256取余,200*2/256取余剩下就是144
在这里插入图片描述

我们添加一条命令进行查看
在这里插入图片描述

可以看到返回值为0。以为$ ?只返回最后一条执行命令的退出状态码,最后一条执行的是ls,所以返回值为0。因此执行函数结束立即取返回值。
在这里插入图片描述

二、命令二操作

继续上一个操作继续操作
在这里插入图片描述
可以看到下面的操作值2输入200的返回码是400,并没有取余,以为echo不限制,第一个使用的return,第二个使用的是echo
在这里插入图片描述
在这里插入图片描述

函数传参

当某个函数定义好了以后,用户可以通过函数名来调用该函数

在这里插入图片描述
可以看到定义的函数变量值被调用输出
在这里插入图片描述
还有显示的数值是看你函数调用来依据的,例如:
在这里插入图片描述
可以看到,我们输入第一个位置变量值是10,第二个是20,但是输出的第一个变量值却是20,因为我们使用函数名先调用的$2,所以第一个变量值是20
在这里插入图片描述

这就是函数传参使用函数名调用定义的函数

函数变量的作用范围

函数在Shell脚本中仅在当前She11环境中有效

Shell脚本中变量默认全局有效

将变量限定在函数内部使用local命令

操作命令

myfun() {
local i
i=8
echo $i
}
i-9
myfun
echo $i

实验操作

在这里插入图片描述
在这里插入图片描述

这里输出的是8、8,定义一个数调用输出,先在函数内执行一遍,然后函数外输出一遍

在这里插入图片描述

在这里插入图片描述
输出的还是8、8,因为它调用的只是函数内的值,9并不是函数内定义的值,所以输出的还是8、8

在这里插入图片描述

这是时候执行是8、9,因为i=9是在函数外部定义的,默认全局有效

在这里插入图片描述
在这里插入图片描述
这里添加一个echo,执行输出结果是9、8、8,因为函数先调用的9然后echo输出,函数内定义i=8,输出8,最后echo输出上一条定义的结果
在这里插入图片描述

在这里插入图片描述
这里添加一个local,最后输出结果是9、8、9,因为函数先调用i=9输出出来,因为函数内部加了个local,使i=8这个变量值限定在函数内部,所以最后echo输出的是9而不是8

递归

函数调用自己本身的函数,一路到底,一层一层进行执行,一直到底

操作命令

#阶乘 5!5*4*3*2*1
fact ( ) {
if[ $ 1-eq 1]
then
    echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
           #5*$result (4*$result (3*$result (2*$result(1))) )
fi
}
read -p "请输入: "n
result=$(fact $n)
echo $result

5!
fact 5   $1=5   temp=4   result=fact 4   echo 5* fact 4    5*4*3*2*1 
fact 4   $1=4   temp=3   result=fact 3   echo 4* fact 3    4*3*2*1
fact 3   $1=3   temp=2   result-fact 2   echo 3* fact 2    3*2*1
fact 2   $1=2   temp=1   result-fact 1   echo 2* fact 1    2*1
fact 1   $1=1                            echo 1

实验操作

在这里插入图片描述
在这里插入图片描述

这就是使用函数递归一层层计算出最后的值

递归目录

在这里插入图片描述
在这里插入图片描述

创建函数库

创建加减乘除和阶乘函数库cxy7.sh
在这里插入图片描述
调用前面创建的函数库cxy7.sh
在这里插入图片描述
可以算出加减乘除和阶乘算出的结果
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值