Shell脚本高级编程笔记一
http://www.cnblogs.com/ygj0930/p/8184277.html
一:函数
1:创建函数
法一:
function name{
commands
} 法二:
name() {
commands
}
2:函数的使用
通过函数名来调用函数,需要注意的是:函数需要先定义,再调用。不然的话会报错。
3:函数返回值
函数运行结束时会返回值,有三种方法为函数生成返回值:
1)默认退出状态码
默认情况下,函数的最后一条命令的执行结果状态 就是函数的退出状态码,如果最后一条命令执行成功,则返回0,否则,返回一个正数。
2)使用return(只能返回整数)
return命令用于退出函数并且返回一个状态码,状态码必须是0~255之间的整数。
3)使用echo输出
在函数中输出内容,在调用函数处接收内容,可以输出任何类型的数据。
result=$(函数 参数...)
4:函数变量
1)向函数传递参数
函数相当于小脚本,所以向函数传参的方式与脚本传参类似。
传参:
函数名 参数1 参数2 ... 函数中调用参数:
$:函数名
$:第一个参数
$:第二个参数
......
2)向函数传递数组
如果把数组变量作为参数传递给函数,则函数只会取到数组的第一个元素。
向函数传递数组,需要将数组拆分成单个值,然后把这些值传递给数组。
func ${array[*]}
在函数中,则需要使用这些变量重新创建一个数组:
newArray=($(echo "$@"))
3)函数返回数组
在函数中使用echo语句输出数组的拆分值,然后在脚本中将他们重新包装成一个数组。
逐个返回数组值:echo ${newarray[*]}
重新包装:result=($(func arg...))
4)全局变量与局部变量
在函数外、脚本内定义的都是全局变量,函数外定义的全局变量可以在函数内访问。
在函数内定义的变量,只需使用local关键字修饰,即可声明成局部变量。
5:高级用法——创建函数库
如果某些函数需要在多个脚本文件中使用,那么可以将这些函数提取出来放进一个公用的的脚本文件中,这个脚本文件就是 库文件。
1)创建一个脚本文件,在其中定义公用的库函数
2)在其他脚本文件中,引入库脚本文件
#!/bin/bash
. 库文件路径 #引用库函数使用source命令,其别名是 点操作符。 使用库函数...
6:高级用法——在.bashrc中定义函数
如果需要每次启动一个shell时都能自动加载某函数,那么我们可以在.bashrc中定义函数或导入库函数。
1)定义函数
在主目录下的.bashrc文件中定义函数,写在文件末尾即可。
2)引入函数
在.bashrc文件的末尾,使用 . 库函数路径 引入即可。
Shell脚本高级编程笔记一的更多相关文章
- 一、Shell脚本高级编程实战第一部
Shell脚本语言是实现linux系统自动化管理的重要且必要的工具,几乎每一个合格的linux系统管理员或者高级运维工程师都要熟练shell脚本语言的编写,只有这样才能提升工作效率,解决工作中的重复劳 ...
- 四、Shell脚本高级编程实战第四部
一.比较两个数的大小 #!/bin/shread -p "Pls input two num:" a b[ -z "$a" ] || [ -z "$b ...
- 三、Shell脚本高级编程实战第三部
保养好自己的发动机:身体的和心里的身体健康:打打球,跑跑步心里健康:多和大家接触,保持家人.朋友的良好关系一.$*和$@的区别 $*:获取shell的所有参数,将所有的参数视为单个字符串. $ ...
- 二、Shell脚本高级编程实战第二部
一.什么是变量? 变量就是一个固定的字符串替代更多更复杂的内容,当然内容里面可能还有变量.路径.字符串等等内容,最大的特点就是方便,更好开展工作 1.变量有环境变量(全局变量)和局部变量 环境变量就是 ...
- 九、Shell脚本高级编程实战第九部
一.监控mysql主从同步是否异常,如果异常,发送短信给管理员 1)开发一个守护进程脚本每30秒实现检测一次. 2)如果错误号是:1158.1159.1008.1007.1062,请跳过 3)请使用数 ...
- 七、Shell脚本高级编程实战第七部
一.写网络服务的系统启动脚本 利用case语句开发类似系统启动rsync服务的脚本 代码: #!/bin/sah. /etc/init.d/functionspidfile="/var/ru ...
- 六、Shell脚本高级编程实战第六部
一.写一个start_nginx脚本,当启动.停止.重启时利用系统函数模拟实现系统脚本启动的特殊颜色效果 (用if实现) #!/bin/sh. /etc/init.d/functions if [ $ ...
- 八、Shell脚本高级编程实战第八部
一.使用for循环在/oldboy目录下创建10个文件名为oldboy-x的文件 #!/bin/sh[ ! -d /oldboy ] && mkdir -p /oldbfor i in ...
- 五、Shell脚本高级编程实战第五部
一.条件表达式 在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作.有时也和if结合,让我们方便判断. test: 1)判断文件是否存在:test -f file 2) ...
随机推荐
- python 全栈开发,Day54(jQuery的属性操作,使用jQuery操作input的value值,jQuery的文档操作)
昨日内容回顾 jQuery 宗旨:write less do more 就是js的库,它是javascript的基础上封装的一个框架 在前端中,一个js文件就是一个模块 一.用法: 1.引入包 2.入 ...
- stl 常用代码
CString类型的replace ; while((pos = it->m_strFile.find(_T("%UC_INSTALL_ROOT%\\"), pos)) != ...
- Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
http://blog.jobbole.com/111422 Java 生态圈 Java 的生态环境开放.自由,在Sun/Oracle.Google.Apache.Eclipse基金会等各大厂商,还有 ...
- 为什么Nginx性能比Apache高
Nginx的工作原理 nginx在启动后,会有一个master进程和多个worker进程.master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控wo ...
- 怎么在项目中使用前端包管理器bower和构建工具gulp
下面以WeUI(微信官方网页开发样式库)介绍一下,怎么把WeUi引入到自己的项目中,我的开发环境Visual Studio 2012,当然了Visual Studio 2015对此已有了更好的支持(h ...
- VS2008中开发智能设备程序的一些总结收藏
结合前几日开发的<全国大坝基础数据库采集端>中的PDA程序开发过程,对VS2008开发智能设备上的程序做个小总结. 1 程序结构 程序中包括四个部分: 1. 系统配置 这个 ...
- 013 MapReduce八股文的wordcount应用
一:Mapreduce编程模型 1.介绍 解决海量数据的计算问题. >map:映射 处理不同机器上的块的数据,一个map处理一个块. >reduce:汇总 将map的结果进行汇总合并 2. ...
- POJ 3384 放地毯【半平面交】
<题目链接> 题目大意: 给出一个凸多边形的房间,根据风水要求,把两个圆形地毯铺在房间里,不能折叠,不能切割,可以重叠.问最多能覆盖多大空间,输出两个地毯的圆心坐标.多组解输出其中一个,题 ...
- HDU 2089 不要62 【数位dp】
<题目链接> 不要62 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer).杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照 ...
- Spring MVC 注解 @RequestParam解析
在Spring MVC 后台控制层获取参数的方式主要有两种,一种是requset.getParameter(“name”),另一种是用注解@Resquest.Param直接获取. 一.基本使用获取提交 ...