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. 函数写在一个文件中,只定义,不执行
      2. 另外一个脚本,读取该函数文件,且加载该函数
# 相关步骤如下
#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]# 

注意,如果是命令行执行函数,如果函数内容变更,函数文件也需要重新加载

posted @   翻滚的小井蛙  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示