shell编程之服务脚本编写,文件锁以及信号捕获

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/

时间: 2024-08-08 01:29:47

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

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

shell实现多级菜单脚本编写 原文:https://www.yuanmas.com/info/2gOwBPvqyb.html 这篇文章主要介绍了Shell实现多级菜单系统安装脚本实例分享,本文脚本用多级菜单实现LAMP.LNMP安装展现效果,需要的朋友可以参考下: 提示:本脚本主要实现多级菜单效果,并没有安装LAMP.LNMP环境,如果要用在实际生成环境中部署LNMP.LAMP环境,只需要简单修改一下就可以了. 演示效果: 1.一级菜单 2.二级菜单 3.执行操作 脚本参考: 代码如下: #!

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

Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将多个Linux命令组合保存成一个脚本文件,可直接给其他人使用. 组合命令 进入一个目录,查看目录的文件,这个过程分别需要执行两条命令,分别是cd 和ls. 分开执行两个命令的形式如下: [[email protected] usr]# cd /usr/ [[email protected] usr]

dropbear编译安装及服务脚本编写

编译安装 下载dropbear.并解压 # wget http://matt.ucc.asn.au/dropbear/releases/dropbear-2015.67.tar.bz2  # tar xvf dropbear-2015.67.tar.bz2 # cd dropbear-2015.67 # ./configure --prefix=/usr/local/dropbear --sysconfdir=/etc/dropbear 编译安装dropbear,要指定安装dropbear的哪些

编译安装bind及SysV服务脚本编写

1.解析程序包 # wget http://ftp.isc.org/isc/bind9/9.7.3/bind-9.7.3.tar.gz    # tar xvf bind-9.7.3.tar.gz    # cd bind-9.7.3.tar.gz # ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --enable-threads --enable-epoll --disable-chr

shell之DHCP服务脚本

DHCP服务脚本 在运行脚本之前需要配置GNS3,可以看我之前的博客有详细教程 #!/bin/bash yum install dhcp -y //安装DHCP服务 yum install expect -y //安装expect工具 /usr/bin/expect <<-EOF spawn cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf //spawn追踪后面的命令 expect{ //匹配 "

Shell编程—构建基本脚本

1. 使用多个命令 如果要两个命令或者多个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. 2. 创建 shell 脚本文件 在创建shell脚本文件时,必须在文件的第一行指定要使用的shell.其格式为: #!/bin/bash 在通常的shell脚本中,井号(#)用作注释行.shell并不会处理shell脚本中的注释行.然而,shell脚本文件的第一行是个例外,#后面的惊叹号会告诉shell用哪个shell来运行脚本(是的,你可以使用bash shell,同时还可以使用另一个shel

shell实现多级菜单脚本编写

这篇文章主要介绍了Shell实现多级菜单系统安装脚本实例分享,本文脚本用多级菜单实现LAMP.LNMP安装展现效果,需要的朋友可以参考下: 提示:本脚本主要实现多级菜单效果,并没有安装LAMP.LNMP环境,如果要用在实际生成环境中部署LNMP.LAMP环境,只需要简单修改一下就可以了. 演示效果: 1.一级菜单 2.二级菜单 3.执行操作 脚本参考: 代码如下: #!/bin/bash # [ -f /etc/init.d/functions ] && . /etc/init.d/fun

linux基础之shell编程(3)-给脚本设置参数

bash的变量类型 本地变量(局部变量) 环境变量 位置变量:$1,$2,$3, ... 特殊变量:$?,$#,$*,[email protected] 那让脚本拥有获取外界参数的能力就要用的位置变量,$1代表第一个参数,$2代表第二个参数,依次类推 例: vartest.sh #!/bin/bash # ONEVAR=$1 TWOVAR=$2 THREEVAR=$3 echo "第一个参数是:${ONEVAR}" echo "第二个参数是:${TWOVAR}" e

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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8