shell脚本之函数

快捷查看指令 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
  1. 执行函数时,直接写函数名即可 无需添加其他内容
  2. 函数必须先定义,再执行 ----- shell脚本是自上向下加载执行
  3. 想要在函数内部定义局部变量,使用​ local ​关键字
  4. 函数如果单独写入一个文件里,建议使用 source 去执行该文件
  5. 函数返回的结果,可以通过 $? (全局变量) 进行获取
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂冄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值