“Shell“函数

一.Shell函数

Shell 函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。
Shell 中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。
Shell函数定义:

方法1:

function 函数名   {
    
    
​     命令序列
}

方法2:

函数名()         {
    
    
​      命令序列
}

各部位解释:

  • function:是 Shell 中的关键字,专门用来定义函数;
  • 命令序列:是函数要执行的代码,也就是一组语句;
  • { }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。

二.函数返回值

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

  • 1.函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
  • 2.退出状态码必须是0~255,超出时值将为除以256取余

举例1:

#!/bin/bash
function  test01  {
    
    
   read  -p  "请输入一个整数: "    num
   return     $[num *2]
} 
test01
echo $? 

编辑脚本,然后进行测试
在这里插入图片描述

举例2:

#!/bin/bash
function  test02  {
    
    
    read  -p   "请输入一个整数: " num
    echo   $[num * 2]
}
res=$(test02)
echo $res

编辑脚本,然后进行测试
在这里插入图片描述

三.函数传参

如何给函数传参

  • 函数体内部的$1 $2 代表的是调用函数时,函数后面跟的位置参数

  • 在函数体内的$#代表调用函数时,函数后面跟的参数个数

  • 在函数体内的$@ $*代表调用函数时,函数后面跟的所有参数

  • 函数体外的$1 $2 代表的是执行脚本时,脚本后面跟的位置参数

  • 在函数体外时,$#代表脚本后面跟的参数个数

  • 在函数体外时,$@代表脚本后面跟的所有参数

不管在函数体内还是在函数体外,$0都代表脚本本身

sum1   ()    {
    
    
​    sum=$[$1 + $2]echo $sum
}

read -p “输入第一个参数:“ first
read -p “输入第二个参数:” second
suml $first $second

示例1:

#!/bin/bash
sum1() {
    
    
    sum=$[$1 + $2]
    echo $sum
}
read -p "输入第一个传入参数: "  first
read -p "输入第二个传入参数: "  second
sum1 $first  $second

在这里插入图片描述

示例2:

#!/bin/bash
// 定义函数
sum2() {
    
          
//函数体内部的$1 $2代表的是调用函数时,函数后面跟的位置参数
  sum=$[$1 - $2]      
  echo $sum
}
//调用函数
//函数体外$1 $2代表的是执行脚本是,脚本后面跟的位置参数
sum2 $2  $1    

在这里插入图片描述

示例3:

#!/bin/bash
sum2() {
    
    
   sum=$[$1 - $2]
   echo $sum
   echo "在函数体内部的\$#代表调用函数时,函数后面跟的参数个数,当前函数后面有$#个参数"
   echo "在函数体内部的\$@代表调用函数时,函数后面跟的所有参数,当前函数后面的参数有:$@" 
   echo "在函数体内部,\$0代表$0"
}
#调用函数
##函数体外的$1  $2代表的是执行脚本时,脚本后面跟的位置参数
echo "在函数体外时,\$#代表脚本后面跟的参数个数,当前脚本后面有$#个参数"
echo "在函数体外时,\$@代表脚本后面跟的所有参数,当前脚本后面参数有:$@"
echo  "在函数体外,\$0代表$0"
sum2 $2  $1
~           

在这里插入图片描述

四.函数变量的作用范围

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

五.递归

函数调用自己本身的函数
示例1:
通过脚本输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
在这里插入图片描述
示例2:
定义也该函数递归目录

在这里插入图片描述
示例3:
定义一个用于十进制转换为二进制的函数
在这里插入图片描述
示例4:
定义一个用于分割IP的函数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Wanghwei17/article/details/130580231