快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)
函数
一,什么是函数
函数是一段功能代码,用来解决shell编程中冗余代码[重复且不连续出现的功能性代码]的问题
1、把相同的程序段定义为函数,可以减少整个程序段代码量,提升开发效率。
2、增加程序段可读性、易读性,提升管理效率。
3、可以实现程序功能模块化,使得程序具备通用性(可移植性)。
### 1. 先定义函数
函数名(函数的唯一标识) + 函数体(功能代码)
### 2. 调用函数
### 函数定义的语法
## 1. 标准shell的函数定义
function 函数名(){
函数体
linux命令
if-else
循环
变量----(局部变量)
return 返回值
}
## 2. 简化写法1
function 函数名{
函数体
linux指令
if-else
循环
变量定义使用
return 返回值
}
## 3. 简化写法2
函数名(){
函数体
return 返回值;
}
### 函数调用
函数名
案例:
# 定义函数
function print(){
echo "床前明月光"
echo "疑是地上霜"
echo "举头望明月"
echo "低头思故乡"
return 10
下方不允许在写代码 ---- 不可达
}
# 函数调用
print
- 执行函数时,直接写函数名即可 无需添加其他内容
- 函数必须先定义,再执行 ----- shell脚本是自上向下加载执行
- 想要在函数内部定义局部变量,使用
local
关键字- 函数如果单独写入一个文件里,建议使用 source 去执行该文件
- 函数返回的结果,可以通过 $? (全局变量) 进行获取
return语句和exit语句
相同点:
都可以让程序返回
不同点:
1. return 只是代表当前函数执行结束,返回一个结果(返回值)
2. exit 代表当前文件执行结束
3. exit 可以结束当前shell环境,回到上一层 父shell
函数实践
1. 定义函数
2. 执行函数调用
场景一: 在同一个shel文件中,定义和使用函数
案例:
[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){
echo "HelloWorld"
return 100
}
#函数调用
hello
执行结果:
[root@centos-128 abc]# ./fun2.sh
HelloWorld
[root@centos-128 abc]# echo $?
100
[root@centos-128 abc]# set | grep "hello"
[root@centos-128 abc]# hello ### 此时 函数和变量位于子shell环境 父shell 拿不到
-bash: hello: 未找到命令
[root@centos-128 abc]# source fun2.sh ### 将执行的变量和函数 引入当前的 shell环境[source其实是引用
当前的shel环境去执行文件 不开启子shell]
HelloWorld
[root@centos-128 abc]# set | grep "hello"
hello ()
[root@centos-128 abc]# hello
HelloWorld
#source与.#
将执行的变量和函数 引入当前的 shell环境[source其实是引用当前的shel环境去执行文件 不开启子shell]
场景二:
1.函数写在一个文件中,只做定义 不做执行
2.另外一个脚本中 读取该函数文件 且加载该函数
[root@centos-128 abc]# cat fun2.sh
#!/bin/bash
#函数定义
function hello(){
echo "HelloWorld"
return 100
}
[root@centos-128 abc]# cat fun5.sh
#!/bin/bash
[ -e /abc/fun2.sh ] && source /abc/fun2.sh || exit
hello
[root@centos-128 abc]# ./fun5.sh
HelloWorld
[root@centos-128 abc]# echo $?
100
函数脚本传入参数
[root@centos-128 abc]# cat fun3.sh
#!/bin/bash
function print(){
echo "print函数调用执行"
echo "第一个参数:$1 第二个参数:$2 第三个参数:$3 传参总个数:$#"
}
[root@centos-128 abc]# cat fun4.sh
#!/bin/bash
[ -e /abc/fun3.sh ] && source /abc/fun3.sh || exit
print $1 $2 $3
[root@centos-128 abc]# ./fun4.sh javascript java vue python
print函数调用执行
第一个参数:javascript 第二个参数:java 第三个参数:vue 传参总个数:3