【Linux】shell编程之—函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、概述
  • 二、函数的查看和删除
    • 1.查看 declare
    • 2.删除 declare
  • 三、函数的返回值
    • 1.return 返回值
    • 2.echo 返回值
  • 四、函数的参数传入与变量范围
  • 五、函数的应用
    • 1.阶乘
    • 2.递归


一、概述

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

作用:

定义较为复杂的但是需要重复使用的内容,以便再次使用可以直接调用函数节约时间,提高效率。

格式一

function 函数名 {
	命令序列
}

【Linux】shell编程之—函数_第1张图片
格式二

函数名() {
	命令序列
}

在这里插入图片描述

二、函数的查看和删除

1.查看 declare

语法: declare -F
【Linux】shell编程之—函数_第2张图片

2.删除 declare

语法:unset 函数名
【Linux】shell编程之—函数_第3张图片

三、函数的返回值

1.return 返回值

return表示退出函数并返回一个退出值,脚本中可以用 ? 变量显示该值使用原则: 1 、函数一结束就取返回值,因为 ?变量显示该值 使用原则: 1、函数一结束就取返回值,因为 ?变量显示该值使用原则:1、函数一结束就取返回值,因为?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为除以256取余

【Linux】shell编程之—函数_第4张图片

2.echo 返回值

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

【Linux】shell编程之—函数_第5张图片

四、函数的参数传入与变量范围

函数的传参

函数内部:

  • 函数体内部的 $1、$2 代表的是调用函数时,函数后面跟的位置参数
  • 在函数体内部的 $#代表调用函数时,函数后面跟的参数个数
  • 在函数体内部的 @ 、 @、 @*代表调用函数时,函数后面跟的所有参数

函数外部:

  • 函数体外的$1、$2 代表的是执行脚本时,脚本后面跟的位置参数
  • 在函数体外时,$# 代表的是执行脚本时,脚本后面跟的参数个数
  • 在函数体外时, ∗ , *, ,@ 代表的是执行脚本时,脚本后面跟的所有参数

函数变量的作用范围

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

五、函数的应用

1.阶乘

#!/bin/bash
##使用函数的递归实现阶乘
test1() {
  if [ $1 -eq 1 ]
  then
    echo 1
  elif [ $1 -gt 1 ]
  then
    local temp=$[$1 - 1]
    local result=$(test1 $temp)
    echo $[$1 * result]
  else
    echo "输入的内容无效,请重新输入内容"
  fi
}
########### main ################
read -p "请输入内容的整数:" num
result=$(test1 $num)
echo "$num的阶乘为$result"

【Linux】shell编程之—函数_第6张图片

2.递归

#!/bin/bash
###使用函数递归目录,如果是文件直接输出文件名,如果是目录则输出目录名且输出此目录下的所有目录和文件名
function list_files {
for f in `ls $1`
do
   if [ -d "$1/$f" ]
   then
      echo "$2$f"
      list_files "$1/$f" " $2"
   else
       echo "$2$f"
   fi
done
}

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

【Linux】shell编程之—函数_第7张图片

你可能感兴趣的:(linux,服务器,windows)