Bash函数
一、什么是Bash函数
Bash不支持goto语句,可以用function实现程序流程跳转。
当前shell中一组组织在一起并被命名的命令。
比脚本的效率高,一旦定义,就成为shell内存的一部分,可以随时被调用,不必从文件中读取。
二、函数定义
两种定义方式:
1、函数名 +() + 定义
2、funciton + 函数名 + () + 定义,()可选
function func () {
return 1;
}
第一个花括号两边的空格是必须的。
三、函数返回值
1、如果使用函数返回值,return只能返回一个整数(0~255),不能返回字符串,且返回值保存在$?变量中,不能直接赋值给其它变量
例如,下面获得函数返回值的写法是错误的
i=`func`
2、如果return没有指定参数,则是最后一行脚本的退出状态值
3、如果要将函数返回值赋值给一个变量,有两种方式:
a)用$?赋值
i=$?
b)在函数中,用echo打印返回值,再赋值
i=`func`
四、函数参数
1、向函数传递的参数被当作位置参量来处理,在函数中是本地变量
2、函数参数用$1, $2 ,..., $n来表示,但和通过命令行传递给脚本的参数不同。调用方式如下:
3、如果函数中要使用脚本的参数,只能将脚本的参数作为函数的参数传递给函数,例如,可以将脚本的第1个参数$1作为函数的第2个参数传给函数,那么函数则通过$2来访问脚本的第1个参数
$ welcome tom joe
Hi,tom and joe
$ set cb panda ; echo $*
cb panda
$ welcome tom joe
Hi,tome and joe
$ echo $1 $2
cb panda
五、函数中的变量和陷阱
1、在一个shell中的变量无局部和全局之分,随用随声明,无作用域的概念。例如,在一个if...fi块中定义的变量,出了这个块的作用域仍然有效。这也说明BASH不适合编写大的复杂的程序
2、和变量一样,函数内部的陷阱是全局的
3、函数中可以定义局部变量,出了函数无效,使用local来定义
echo $count
六、函数调用
1、使用function只是定义函数,要执行函数中的命令必须在脚本中或命令行上调用函数,例如:$ func param1 param2
a) 将函数单独放入一个脚本里,再在命令行上执行脚本(直接执行,或使用.,或source),是不会执行函数里的命令的
b) 将函数单独放入一个脚本,然后执行,相当于在执行该脚本的shell环境中定义了该函数
例如:下面的命令只是在shell环境中定义函数,并不会调用函数
$ ./func_script.sh
或
$source ./func_script.sh
2、函数可以递归:函数可以自己调用自己,调用次数没有限制
3、函数中使用exit命令退出整个脚本。
七、常用命令
1、查看定义了哪些函数
$declare -f
$declare -F //只列出函数名
2、撤消函数定义
$unset func_name
3、将函数输出给子shell
$export -f func_name
=-=-=-=-=
Powered by Blogilo
Bash函数的更多相关文章
- 一些方便系统诊断的bash函数
原文地址:一些方便系统诊断的bash函数 一些方便系统诊断的bash函数:http://hongjiang.info/common-bash-functions/ 这段脚本包含100多个bash函数, ...
- bash函数定义/使用/传参…
函数:function, 功能 过程式编程,代码重用 模块化编程 简洁 语法: function f_name { ...
- Bash函数使用
#!/bin/bash function Fun_Name() { #function here echo "this is a function" } Fun_Name
- Bash脚本编程学习笔记08:函数
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执 ...
- CVE: 2014-6271、CVE: 2014-7169 Bash Specially-crafted Environment Variables Code Injection Vulnerability Analysis
目录 . 漏洞的起因 . 漏洞原理分析 . 漏洞的影响范围 . 漏洞的利用场景 . 漏洞的POC.测试方法 . 漏洞的修复Patch情况 . 如何避免此类漏洞继续出现 1. 漏洞的起因 为了理解这个漏 ...
- 脚本命令高级Bash脚本编程指南(31):数学计算命令
题记:写这篇博客要主是加深自己对脚本命令的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 高等Bash脚本编程指南(31):数学盘算命令 成于坚持,败于止步 操作数字 factor ...
- 【转】Linux 技巧: Bash 参数和参数扩展
重点看下清单7 现在,很多 Linux® 和 UNIX® 系统上都有 bash shell,它是 Linux 上常见的默认 shell.通过本文,您将了解到如何在 bash 脚本中处理参数和选项,以及 ...
- bash编程总结
bash应该是目前Linux上最流行的shell脚本解释程序了(还有个shell叫dash,我太讨厌这个东东了.),只要你在linux上工作,并且希望自己能够工作得更愉悦,那么你应该熟悉最基本的bas ...
- Shell 函数定义与调用
linux shell 可以用户定义函数,然后在 shell 脚本中可以随便调用. 以一个计算两数之和的函数为例: #! /bin/bash # 函数定义 sum(){ return $(($1+$2 ...
随机推荐
- 读 zepto 源码之工具函数
Zepto 提供了丰富的工具函数,下面来一一解读. 源码版本 本文阅读的源码为 zepto1.2.0 $.extend $.extend 方法可以用来扩展目标对象的属性.目标对象的同名属性会被源对象的 ...
- 被低估的选手 - JavaFx
被低估的选手 - JavaFx 1.MFC(Visual C++) 个人不是很喜欢这个框架,太多系统定义的东西,就像无底洞,学都学不完,这个东西需要你有比较强的记忆力,并且能融会贯通里面很多预定义的功 ...
- 设计模式--MVC(C++版)
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式.这种模式用于应用程序的分层开发. Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分.通常模型对象 ...
- 【WPF】学习笔记(三)——这个家伙跟电子签名板有个约定
这篇博客依旧是以电子签名板为基础而展开的,主要是对前文([WPF]学习笔记(一)--做一个简单的电子签名板)存在的部分问题进行解释,以及部分小功能的添加.由于这篇博客是建立在学习笔记一的基础上的,所以 ...
- 我对Stub和Mock的理解
介绍 使用测试驱动开发大半年了,我还是对Stub和Mock的认识比较模糊,没有进行系统整理. 今天查阅了相关资料,觉得写得很不错,所以我试图在博文中对资料进行整理一下,再加上一些自己的观点. 本文是目 ...
- STM 8s 外部中断寄存器无法写入
虽然说单片机开发就是对手册的研究,但是开发过程中,还是要做些笔记的,方便以后注意那些坑. 工作要求所以接触了一下STM328s00f3这个芯片,配置外部中断的时候遇到了一点问题 PS:IAR这个开发软 ...
- 终端的CTRL+S 解说
在很多类Unix 的系统上,Ctrl-S 都有特殊的含义:它会"冻结"终端(它曾 经被用来暂停快速滚动).因为"保存"一般也是用这个快捷键,所以经常 会有人不假 ...
- jmeter IP欺骗功能实现
使用过loadrunner的同学,应该都了解有个IP欺骗功能,jmeter遇到类似需求怎样实现呢? 环境:windows7,jdk1.8,jmeter3.1 使用IP欺骗功能前提是本地有多个可用IP, ...
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2
本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以 引用 一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...
- 树莓派安装FLASK服务;并在端网页读取 GPIO状态和系统时间
做过一些物联网的作品:因为不想一直做APP来控制,因为不能每个人都去下载你自己做的APP,浏览器大家都是有的:那么每个人通过浏览器WEB来访问我们服务器,岂不是很简单和方便,采用flask+pytho ...