shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处。基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题。

开班第20天:

今天的课程大纲:

  1. shell编程中的函数

  2. 编写一个自动挂载的脚本

  3. 利用autofs怎么实现自动挂载

  4. 文件锁和信号捕获trap

  5. sed流文件编辑器

详细讲解:

  • shell编程中的函数

shell中,我们定义函数的方法有两种:

下面调用的时候,直接调用函数名就可以了

这里需要注意的就是shell中函数的返回值,它跟其他编程语言不一样,它的返回值return是返回函数的退出状态码。执行成功为0,不成功为非0.

  • 编写一个自动挂载的脚本

编写服务脚本,一般的步骤是:

1.有执行权限(chmod +x /....)

2.支持start,stop...

3.开机启动

接下在我们编写一个自动挂载的服务脚本,跟据上面所说的步骤,

1.我们可以先写出真个脚本的主体:3.4行是代表我这个服务脚本可以开机启动,5行代表我要使用/etc/init.d/functions这个函数库,下面的success和failure都是来自这个函数库的。

2.编写start()函数,mountpoint是检测/boss这个文件夹是否为一个挂载点,如果是挂在点,那么我启动就失败,也就是本身已经在挂载,如果不是挂载点,那么我正常启动,然后挂载ip文件。stop函数跟start函数类似。

3.编写status()函数

4.测试启动,把编写的脚本移动到/etc/init.d/明明为bossnfs

  • 利用autofs怎么实现自动挂载

这里的自动挂载,跟我们之前学的添加到/etc/fstab不一样,他是当你访问某一个目录的时候,我们的共享就会挂在这个访问的目录,即使这个目录是不存在的。这里我们可以使用autofs来实现自动挂载,安装起服务,yum install autofs,service autofs restart。这里有两个需求,第一是访问/mnt/boss这个目录的时候,自动挂载172.16.65.128:/share到这个boss目录。第二个是访问/boss目录的时候,自动自动挂载172.16.65.128:/share到这个boss目录。

需求1.修改配置文件,vim /etc/auto.master,添加/mnt这个目录

编写/etc/auto.mnt这个文件:

需求2:修改配置文件,vim /etc/auto.master,添加/boss到这个目录,这里需要注意的,根目录要用/-表示

编写/etc/auto.root文件:这里需要注意的是boss这个目录是在根目录下的,所以要用绝对路径。

测试:成功挂载

  • 文件锁和信号捕获trap

1.什么是文件锁,文件锁就是我们在运行一个服务的时候,另一个终端是不能同时运行的,这就是文件锁的功能,那么我们写一个简单的脚本测试一下文件锁的功能:

测试,我在一个终端运行的时候,另一个终端也开始运行这个脚本,但是错误了,提示:

2.信号捕获,我们在上面的脚本执行的时候,按下ctrl+c,运行终止,但是锁文件没有被删除,一直存在,所以下次运行这个脚本的时候,是无法运行的,除非我们手动删除这个锁文件,所以我们要捕获ctrl+c这个信号,然后通过捕获这个信号之后,执行某一定的操作,使得我们的锁文件不至于一直存在。

需求1:使得上述服务脚本在执行的过程中,不能按ctrl+c,我把脚本的最后改成下面:代表我trap了2信号,""里面什么也没有,表示捕获信号之后什么也不做,在删除了$FLOCK锁文件之后,我们再释放2信号。


需求2:我们在脚本运行过程中允许按ctrl+c,但是按了之后,这个脚本必须自动删除锁文件,那么下次运行的时候就不会提示锁文件存在,无法运行,这里我们只需要修改掉捕获信号2之后,删除锁文件然后退出即可。


  • sed流文件编辑器

sed称为流文件编辑器或者非交互编辑器,sed适合在脚本中编辑文件,因为vim无法在脚本中使用。sed主要的用法有增删改查,这个大家可以看一下man手册,还有就是多多练习。明天我会提供一个sed的文件,把sed基本上所有的用法都会概括一下。希望大家关注一下!

总结:

今天主要讲了在shell脚本编程中我们以后会经常接触的,服务脚本的编写,其实学这个懂得编写一个,其他的都是画饼,另外还讲解了sed流文件编辑器,因为在脚本中,我们无法使用vim来进行对配置文件修改的。

转自:

《第20天》shell编程之服务脚本编写,文件锁以及信号捕获 - 今日头条(TouTiao.com)
http://toutiao.com/a6321640633670009090/

shell编程之服务脚本编写,文件锁以及信号捕获的更多相关文章

  1. (转)shell实现多级菜单脚本编写

    shell实现多级菜单脚本编写 原文:https://www.yuanmas.com/info/2gOwBPvqyb.html 这篇文章主要介绍了Shell实现多级菜单系统安装脚本实例分享,本文脚本用 ...

  2. shell编程系列1--shell脚本中的变量替换

    shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...

  3. 小鸟初学Shell编程(二)编写简单的Shell脚本

    Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...

  4. nginx 服务脚本编写模板

    编写nginx服务脚本:脚本内容如下: [root@www ~]# cat /etc/init.d/nginx #!/bin/bash # nginx Startup script for the N ...

  5. Linux - 简明Shell编程11 - 调用脚本(CallTheScript)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 主脚本: CallTheScript.sh #!/bi ...

  6. shell启停服务脚本模板

    一. 启动脚本模板:符合幂等性 如果该服务已经启动,再次调用该脚本,不会报错,也就是说可以反复多次调用,另外启动成功返回 一个参数,提供给自动发布平台校验该服务是否启动 #!/bin/bash ins ...

  7. Shell编程—图形化脚本

    1创建文本菜单 1.1普通的文本菜单 $ cat menu1 #!/bin/bash # simple script menu function diskspace { clear df -k } f ...

  8. linux服务脚本编写

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. shell编程:利用脚本实现nginx的守护自动重启

    nginx_daemon.sh #!/bin/bash # this_pid=$$ while true do ps -ef | grep nginx | grep -v grep | grep -v ...

随机推荐

  1. linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决

    文章出自http://www.2cto.com/os/201307/227199.html linux中ssh登录Permanently added (RSA) to the list of know ...

  2. java中的词汇

    java中的词汇: 空白符:空格,制表符,换行符.他们的存在使得代码变得很美观. 标识符:由大小写字母,数字,下划线,美元符号组成.且数字不能用于标识符第一个字符. 字面值:变量的值通常使用表示常量的 ...

  3. The most orzed and orzing man

    The most orzed and orzing man 题目链接:http://acm.xidian.edu.cn/problem.php?id=1184 Sprague-Grundy定理:htt ...

  4. POJ 3020 Antenna Placement(无向二分图的最小路径覆盖)

    ( ̄▽ ̄)" //无向二分图的最小路径覆盖数=顶点总数-最大匹配数/2(最大匹配数=最小点覆盖数) //这里最大匹配数需要除以2,因为每两个相邻的*连一条边,即<u,v>和< ...

  5. 自己造容器List

    //自己造容器--List /* 1.iterator 2.头迭代器 3.尾迭代器 4.链表长 5.判空 6.清除 7.取头元素 8.取尾元素 9.头插入 10.尾插入 11.头删除 12.尾删除 1 ...

  6. Objetive-C initialize研究

    initialize执行时机           在向一个类执行实例方法或者类方法(除了initialize和load方法之外)的时候,触发initialize方法,因此如果一个类你没有使用的时候,是 ...

  7. jbpm4.3表结构和表字段说明

    整体说明: JBPM4_DEPLOYMENT   流程定义表JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION  流程实例表JBPM4_HIST_ACTINST 流程活动 ...

  8. 一步一步学EF系列【6、IOC 之AutoFac】

    前言 之前的前5篇作为EF方面的基础篇,后面我们将使用MVC+EF 并且使用IOC ,Repository,UnitOfWork,DbContext来整体来学习.因为后面要用到IOC,所以本篇先单独先 ...

  9. oracle 11g高级 安装图解(摘自网络)

    使用的高级安装 启动OUI后出现“选择安装方式”窗口,我们选择:高级安装 步骤3:出现“选择安装类型”窗口,选择我们需要安装的版本.我们在此肯定是选择企业版. 至于产品语言不用选择,它会根据当前系统的 ...

  10. urllib2 之info 学习

    之前介绍了根据old_url获取真实url的geturl的方法,而根据urlopen返回的应答对象的info方法可以获取服务器发送头部headers的内容,并且通过字典形式反馈出来,同样测试代码如下: ...