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. sql 针对拼接语句的优化

    在日常的开发中尽量少采用拼接语句,但针对多条件联合查询,并有多字段可以偏序的情况下,的确采用拼接语句要方便简单得多,单数据库会因为传入的参数不同而产生不同的计划数,计划数多了,对数据库影响很大. 为了 ...

  2. SQLite学习网址

    http://www.runoob.com/sqlite/sqlite-data-types.html

  3. JSON.parse() JSON.stringify() eval() jQuery.parseJSON() 的区别

    http://www.jb51.net/article/81880.htm    :   jQuery.parseJSON(jsonString) : 将格式完好的JSON字符串转为与之对应的Java ...

  4. discuz网站数据库迁移

    你的discuz网站数据库迁移,或者修改过改密码后,还要以下相关配置文件修改,才能不会出现1045错误 以windows系统为例:首先登陆远程桌面,在运行中输入cmd,单开命令模式,再输入  net ...

  5. Kali Rolling 下利用rtl-sdr跟踪飞机路线

    环境 kali rolling 状态:未升级发行版,仅用 "apt-get upgrade " 命令更新了软件 原料 RTL-SDR电视棒一个,芯片是RTL2832U 原理 我国民 ...

  6. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

  7. pigcms 微外卖下单加数量bug

    bug:加数量的时候结算金钱出现NAN 先给一个简单粗暴的解决办法. 找到/tpl/static/dishout/js/main.js 把  65行 disPrice = parseFloat(sig ...

  8. php基础(五)日期

    PHP Date() 函数 date(format,timestamp) 参数 描述 format 必需.规定时间戳的格式. timestamp 可选.规定时间戳.默认是当前时间和日期. 注释:时间戳 ...

  9. Ubuntu shortcuts

    Ubuntu shortcuts 打开系统管理器 gnome-system-monitor

  10. C#读取和写入文件

    一.读取文件 如果你要读取的文件内容不是很多, 可以使用 File.ReadAllText(FilePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding) ...