博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell中的函数
阅读量:3742 次
发布时间:2019-05-22

本文共 1219 字,大约阅读时间需要 4 分钟。

shell中的函数

1.定义与使用函数

  • 在shell中,函数必须在使用前定义,有两种风格的定义函数的方法
#第一种风格,利用关键字function定义function myfunc1 {...}#第二种风格,直接定义myfunc2() {...}
  • 调用并使用函数很简单,直接写名字即可。注意只能在定义之后调用函数
myfunc1myfunc2

2.函数的参数与变量

  • 函数也可以被传参,如下。值得注意的是,由于函数体内将$0 $1 $2等识别为函数的参数,所以函数体内无法用$0 $1 $2等获得脚本参数。如果函数体内实在要获得脚本参数,则可以在调用函数时,将脚本参数原封不动的传给函数
myfunc1() {#在函数中可以使用$0、$1、$2、$#等得到函数的参数}myfunc1 1 $var #向函数传参
  • 普通变量可以在函数内、外随便用,反正是全局的。假如我们想实现函数私有的变量怎么办?只需在函数体内定义变量,并用local修饰,这样变量的作用域就被限制在了函数体内部

3.函数的退出

  • 函数运行结束时会返回一个返回值,它的值其实是函数中最后一条命令的返回值,所以,最后一条命令前面那些命令的执行成功与否,我们是不得而知的
  • 相对于默认的函数返回值,更推荐使用return命令来自定义返回值,其值可以由我们自己定义
func1() {...return $[ $var * 2 ]  #这种方法,使得函数返回值的灵活性大大增加了}
  • 获取函数返回值有两种方式,如下。推荐使用变量方式来获取
func1echo $?		#直接用$?获取返回值,范围限制为0-255func1ret=`func1` #利用变量来接收函数返回值,没有任何范围限制

4.shell函数库的使用和函数作用域

  • 函数的作用域和全局环境变量是相同的,即“父亲传儿子”
  • 所谓shell函数库,就是定义了一堆函数的脚本。比如a.sh中定义了很多函数,其他脚本b.sh、c.sh去调用那些函数,那么可以称a.sh为函数库。但是问题来了,在控制台中先执行a.sh,再执行b.sh,发现b.sh识别不到a.sh函数库
#在控制台中输入./a.sh./b.sh  #b.sh会提示command not found 即识别不到a.sh函数库
  • 其实原因很简单,是函数的作用域造成的,b.sh是a.sh同级的shell,并不是其子孙,所以a.sh中的函数作用域覆盖不到b.sh
控制台shell    |__a.sh(函数作用域从这里开始)    |   |__xxx      |__b.sh
  • 解决方法是使用source命令来执行a.sh,将它在当前shell的上下文中执行,即将函数作用域的起始位置改为它的父亲,这样它的同级shell也能被作用域所覆盖了
控制台shell(函数作用域从这里开始)    |__a.sh____↑    |   |__xxx      |__b.sh

转载地址:http://gpvin.baihongyu.com/

你可能感兴趣的文章
C#委托和事件实现观察者模式
查看>>
水一贴,用任何一种语言导出oracle存储过程(视图)脚本
查看>>
在线考试系统需求分析
查看>>
C#设计模式
查看>>
C# 使用 WebBrowser 实现 HTML 转图片功能
查看>>
【asp.net core 系列】14 .net core 中的IOC
查看>>
.NET进行客户端Web开发又一利器 - Ant Design Blazor
查看>>
基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
查看>>
【C#学习之旅】一、数据类型
查看>>
基于 abp vNext 和 .NET Core 开发博客项目 - 再说Swagger,分组、描述、小绿锁
查看>>
【C#】CsvHelper 使用手册
查看>>
Dotnet core使用JWT认证授权最佳实践(一)
查看>>
WPF 圆型布局(测量过程)
查看>>
[Asp.Net Core] Blazor Server Side 项目实践 - 切换页面时保留状态
查看>>
DLL/OCX文件的注册与数据执行保护DEP
查看>>
你真正了解public、internal、protected、private吗?不妨幽默一些
查看>>
记一次Task抛异常,调用线程处理而引发的一些随想
查看>>
五、C#入门—流程控制
查看>>
C# WebClient调用WebService
查看>>
《[深入浅出 C#] (第3版)》 - 学习笔记
查看>>