一.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的函数