shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处。基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题。
开班第20天:
今天的课程大纲:
-
shell编程中的函数
-
编写一个自动挂载的脚本
-
利用autofs怎么实现自动挂载
-
文件锁和信号捕获trap
-
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/