目录
频道首页
📚 shell脚本中函数以及函数递归
收藏
0
xy20118 最近修改于 2024-05-13 17:04:50

前言

image

什么是函数?

在Bash Shell中,函数是一组被集合在一起并可以被多次调用的命令序列。函数可以接受参数并可以返回一个值。使用函数可以帮助我们组织和重复使用代码,使代码更加模块化和易于维护,可读性更强。

为什么要使用函数?

  1. 使用函数可以避免代码重复(可以偷懒);
  2. 使用函数可以将一个大的工程分割为若干小的功能模块,代码的可读性更强。

定义函数

函数的定义通常遵循以下语法:

function 函数名 {
cmd序列
}
[root@c1 ~]# function a { hostname;date; }
[root@c1 ~]# a
c1
2020年 05月 13日 星期一 14:20:48 CST

第二种常用:

函数名 () {
cmd序列
}
[root@c1 ~]# ceshi(){ hostname;date; }

第三种 不常用 不写了

!!#ff0000 注意!! 1.调用函数 直接写函数名

  1. 同名函数 后一个生效
  2. 调用函数一定要先定义函数
  3. 每个函数是独立的

调用 查看 删除 函数

1.调用参数

要调用函数,只需要使用函数名即可,后面可以跟上参数(如果有的话),参数之间用空格分隔

[root@c1 ~]# ceshi(){ hostname;date; }
[root@c1 ~]# ceshi  #直接函数名调用
c1
2020年 05月 13日 星期一 14:15:51 CST

2.删除函数

!!#ffff00 unset 函数名!!

[root@c1 ~]# unset a   #上面定义的函数a 删除  
[root@c1 ~]# a
bash: a: 未找到命令... 

3.查看函数

!!#ffff00 declare -F 定义函数列表!!

[root@c1 ~]# declare -F   #显示所有的定义函数名

!!#ffff00 declare -f 定义函数具体内容!!

[root@c1 ~]# declare -f  |grep ceshi
ceshi () 
[root@c1 ~]# ceshi
c1
2020年 05月 13日 星期一 14:49:46 CST

函数返回值

获得函数返回值的两种方式

  • return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值 使用return ,退出状态码必须是0~255,超出时值将为除以256取余
cc() {
read -p "请输入一个数字:" num
  return $[$num*2]
}
cc
#-----------------------
echo $?
~   
[root@c1 ~]# bash ceshi.sh
请输入一个数字:60
120
[root@c1 ~]# bash ceshi.sh
请输入一个数字:500  #超过256 取不到正确值。
232

直接在函数中使用echo指令

[root@c1 ~]# bash ceshi.sh
请输入一个数字:16              
32
[root@c1 ~]# bash ceshi.sh
请输入一个数字:1000
2000

函数的传参数

#!/bin/bash
sum1(){
sum=$[$1+$2]
echo $sum
}
read -p "请输入第一个位置参数:" first
read -p "请输入第一个位置参数:" second
sum1 $first $second
[root@c1 ~]# bash ceshi.sh
请输入第一个位置参数:22
请输入第一个位置参数:22
44

函数的作用范围

首先函数需要先定义 后调用 。 简单可以理解为 : 在函数内部定义的变量默认是局部变量,只在函数内部有效。通过使用 local 关键字可以明确地声明一个变量为局部变量

aa () {
 #local  
     local i=6
     echo $i
 }
 i=8
 aa
 echo $i

函数递归

函数调用自己本身的函数 比如:5阶乘是54321 6阶乘是65432*1 举例子 阶乘使用for 循环写脚本

#!/bin/bash
sum=1
i=1
read -p "请输入阶乘值:" num    # 赋值 num  注意空格
for i in `seq  $num`
do
sum=$[i*sum]
done
echo $sum
[root@c1 ~]# bash ceshi.sh
请输入阶乘值:6
720
[root@c1 ~]# vim ceshi.sh 
[root@c1 ~]# bash ceshi.sh
请输入阶乘值:5
120
[root@c1 ~]# bash ceshi.sh
请输入阶乘值:8
40320
内容大纲
批注笔记
📚 shell脚本中函数以及函数递归
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板