shell实战_函数实际使用
shell函数的实际开发
函数的定义
shell函数标准定义
return 可有可无,给用户一个返回码表示执行结果
function 函数名(){
函数体
return 返回值
}
简化
当使用function 关键字的时候可以省略括号
function 函数名 {
函数体
return 返回值
}
超级简化了
必须有括号
函数名(){
函数体
return 返回值
}
执行该函数
函数名
执行函数的基础概念
有关函数执行的基础概念
- 执行shell函数,直接写函数名称即可,无需添加其他内容
- 函数必须先定义,再执行,shell脚本自上而下加载
- 函数体内的定义变量,称之为局部变量
- 函数体内需要添加return语句,作用是退出函数,且赋予返回值给调用该函数的程序,也就是shell脚本(在shell脚本中,定义,使用函数,shell脚本执行结束后,通过$?获取其return的返回值)
- return语句和exit不同(retun只能写在函数中,exit是shell的内置命令)
- return 是结束函数的执行,返回一个(退出值,返回值);
- exit 是结束shell环境,返回一个(退出值,返回值)给当前shell
- 函数如果单独写入一个文件里面需要使用source读取(函数的另一种玩法,写入文件中,用于加载)
- 函数内,使用local关键值,定义局部变量
函数实践
1.定义函数
2.执行函数
-
在同一个shell文件中定义和使用函数
[root@localhost tmp]# cat test_function.sh #!/bin/bash # function sayHello { echo "hello world 1" return 113 } sayHello [root@localhost tmp]# bash test_function.sh hello world 1 [root@localhost tmp]# echo $? 113 [root@localhost tmp]#
-
函数定义和执行,分开在不同的文件中;
-
- 函数写在一个文件中,只定义,不执行
- 另外一个脚本,读取该函数文件,且加载该函数
-
# 相关步骤如下
#1. 先生成一个函数脚本,作用是记录函数,不运行
[root@localhost myfunction]# cat myfunctiontest1.sh
#!/bin/bash
function sayhai(){
echo "hi ,guliglugli"
return 0
}
function sayhello(){
echo "hello ,guliglugli"
return 0
}
[root@localhost myfunction]#
#2. 如何检测当前的shell环境变量
[root@localhost myfunction]# set |grep say
[root@localhost myfunction]#
#3. 利用点或者source 命令读取shell脚本,能够加载到当前的shell环境中
[root@localhost myfunction]# source myfunctiontest1.sh
#4.再次验证
[root@localhost myfunction]# set |grep say
sayhai ()
sayhello ()
[root@localhost myfunction]#
#5.可以退出当前的shell,再次登录,查看环境变量
[root@localhost myfunction] exit
#6.再次加载函数文件
root@localhost ~]# set |grep say
[root@localhost ~]#
root@localhost myfunction]# souhirce myfunctiontest1.sh ##再次加载文件
[root@localhost myfunction]# set |grep say
sayhai ()
sayhello ()
[root@localhost myfunction]# sayhai
hi ,guliglugli
##########################################再另一个脚本中执行函数
[root@localhost myfunction]# cat testfunction.sh
#!/bin/bash
###条件判断文件是否存在,加载文件
[ -f ./myfunctiontest1.sh ] && source ./myfunctiontest1.sh ||exit
###执行函数
sayhai
[root@localhost myfunction]# set |grep say
[root@localhost myfunction]# bash testfunction.sh
hi ,guliglugli
[root@localhost myfunction]# bash testfunction.sh
hi ,guliglugli
[root@localhost myfunction]# set |grep say ###前面因为是bash开启子shell执行
[root@localhost myfunction]# source testfunction.sh
hi ,guliglugli
[root@localhost myfunction]# set |grep say
sayhai () ###这是因为是当前shell执行,所以当前环境变量能看见函数的。
sayhello ()
[root@localhost myfunction]#
注意,有关source和bash是否开启子shell且再当前shell环境中加载函数的一个理解。
脚本函数传入参数执行
[root@localhost myfunction]# source myfunctiontest1.sh
[root@localhost myfunction]# myprinvar 2 4 5 6 7 8
传入参数有:
2
4
5
6
7
8
[root@localhost myfunction]# cat myfunctiontest1.sh
#!/bin/bash
function sayhai(){
echo "hi ,guliglugli"
return 0
}
function sayhello(){
echo "hello ,guliglugli"
return 0
}
function myprinvar (){
echo "传入参数有:"
for i in "$@"
do
echo ${i}
done
return 0
}
[root@localhost myfunction]#
注意,如果是命令行执行函数,如果函数内容变更,函数文件也需要重新加载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!