shell函数

本文详细介绍了Shell函数的定义、查看与删除、返回值、参数传递及变量作用域。通过示例解析了如何创建和使用函数,特别是函数的返回值和递归应用,例如在计算阶乘问题上的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、shell函数定义

  • 使用函数可以避免代码重复
  • 使用函数可以将大的工程分割为若干个小的功能模板,代码的可读性更强

1.函数定义的格式

【1】

function 函数名   { 
 命令序列 
}   

例子1:
在这里插入图片描述
例子2:

【2】

函数名()  { 
命令序列  
}

例子2:

在这里插入图片描述

2.函数的查看和删除

declare
语法: declare -F
在这里插入图片描述

删除declare

语法:unset 函数名

在这里插入图片描述

3.函数返回值

1.return返回值

  • return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值(只能在0-255之间)
  • 使用原则:
    1、函数一结束就取返回值,因为 $ ?变量只返回执行的最后一条命令的退出码
    2、退出状态码必须是0~255,超出时将为除以256取余
function db1  { 
read -p “请输入:” value 
return  $[ $value * 2] 
} 
db1 
echo $? 

在这里插入图片描述

2.echo返回值

echo对于linux来讲就是一个万能输出的工具,当 return 不能满足我们我们对返回值的需求时,可以强迫echo来充当返回值输出工具

db1() { 
read -p “请输入:”value 
echo $ [$value * 2]
} 
result=`db1 ` 
echo $result 

在这里插入图片描述

4.函数传参:

  1. 函数内部:
    函数体内部的 $ 1、$ 2 代表的是调用函数时,函数后面跟的位置参数
    在函数体内部的 $ #代表调用函数时,函数后面跟的参数个数
    在函数体内部的$ @、$*代表调用函数时,函数后面跟的所有参数
函数内部的参数代表含义
$ 1、$ 2代表的是调用函数时,函数后面跟的位置参数
$ #代表调用函数时,函数后面跟的参数个数
$ @、$*代表调用函数时,函数后面跟的所有参数
  1. 函数外部:
    函数体外的$ 1、$ 2 代表的是执行脚本时,脚本后面跟的位置参数
    在函数体外时,$ # 代表的是执行脚本时,脚本后面跟的参数个数
    在函数体外时,$ * 、$@ 代表的是执行脚本时,脚本后面跟的所有参数
函数内部的命令代表含义
$ 1、$ 2代表的是执行脚本时,脚本后面跟的位置参数
$ #代表的是执行脚本时,脚本后面跟的参数个数
$ * 、$@代表的是执行脚本时,脚本后面跟的所有参数
sum2() {
 #函数体内部的$1 $2代表的是调用函数时,函数后面跟的位置参数
 sum=$[$1+$2]
 echo $sum
 echo $#
 echo $@
}

#调用函数
#函数体外的$1 $2代表的是执行脚本时,脚本后面跟的位置参数
sum2 $1 $2
echo $@
echo $#

在这里插入图片描述

在这里插入图片描述

5.函数变量的作用范围

  • 函数默认只能脚本内的 shell 环境有效(使用source执行脚本,也会影响系统的当前shel环境)
  • 脚本中的变量默认全局有效 (即函数体内外都有效)
  • 在函数体内执行 local 变量 ,可将变量限定在函数体内部使用

在这里插入图片描述

二、函数的应用

阶乘

  • 函数调用本身的函数
    例子1.数字本身的阶乘
fact () {                           #定义函数名fact
  if [ $1 -eq 1 ]                   #创建一个if语句,当1=1时候直接输出1
  then
    echo 1     
   elif [ $1 -gt 1 ]                #如果数字大于1,则让之相减1
    then
     local temp=$[$1 - 1]           #local的作用是让变量temp在函数体内执行
     local result=$(fact $temp)     #输出结果返回值为(函数名 和上一次的结果)
     echo  $[$1 * result]           #输出结果值,定义命令
   else
     echo "输入的内容无效,请重新输入内容"  
  fi
}


# main #
read -p "请输入内容的整数:" num       #定义变量num我们要阶乘的值
result=$(fact $num)                 #返回值为执行这个函数并带入我们的数字
echo "$num的阶乘为$result"            #输出的最后结果即为$result我们的返回值
~

在这里插入图片描述

递归目录

function digui {
 for i in `ls $1`
do
 if [ -d "$1/$i" ]
  then
      echo "$2$i"
      digui "$1/$i" " $2"
    else
       echo "$2$i"
 fi
done
}



### main ###
 read -p "请输入需要查询的目录:" num
digui "/$num" " "

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值