本文根据DevOpsDays嘉宾现场分享内容整理并发布。欢迎关注“高效运维”公众号,高效运维致力于打造F2F直的垂运享社区维分,与运维一起愉快的成长。

作者简介:

赵舜东

中国SaltStack用户组发起人,GOPS金牌讲师,金牌作者

江湖人称赵班长,曾负责武警某部指挥自动化架构和运维工作,2008年退役后一直从事互联网运维工作;曾带领团队负责国内某电商运维工作,UnixHot运维社区创始人、《SaltStack入门与实践》作者。


导读:大家都是文明人,尤其是做运维的,那叫一个斯文啊。怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓。

下面的案例,我们以MySQL数据库备份SHELL脚本的案例来进行阐述:

不记录日志的SHELL脚本就是耍流氓!

我们经常在工作中会遇到一个苦恼的事情,一个SHELL脚本到底干了什么,什么时候开始执行,什么时候结束的。尤其是数据库备份,我们想知道我们的MySQL数据库备份时间。所以给脚本加日志显尤为重要。那么我们的脚本应该有一个日志的函数,专门用于记录日志:得

上面的脚本我编写了一个日志函数shell_log,每次记录日志,我们直接执行shell_log把日志内容当作第一个参数传给它就可以了,赶紧试试。

[root@linux-node2 shell]# catshell_template.sh.log 2016-08-27 06-01-19 : shell_template.sh :shell beginning ,write log test 2016-08-27 06-01-19 : shell_template.sh :shell success ,write log test

直接就能执行的SHELL脚本很容易耍流氓?

一个脚本直接就能执行?难道不是直接就能执行吗?试想,你临时编写了一个特别重要的脚本,干的事情可能有破坏性,一不小心被别人./执行了怎么办呢?而且很多时候我们一个脚本的功能可能有多个,所以我们有必要让用户可以选择进行执行。

上面的脚本我们编写了shell_usage函数,用来告诉用户,这个脚本的使用方法。同时,我要强调一下,像编写SHEEL我们经常是面向过程的,建议以函数为单位,这样脚本非常的清晰可读。赶紧执行以下看看效果吧。

[root@linux-node2 shell]# ./shell_template.sh Usage: ./shell_template.sh {backup}

不加锁的SHELL脚本就是让别人耍流氓

你编写的脚本能多个人同时执行吗?如果不能,那么如果多个人一起执行会怎么样呢?想想是不是有点冒冷汗。所以,不要给我们的其它小伙伴留下陷阱。不过如果你公司就你一个运维,真的不用怕吗?试想如果是定时任务再运行这个脚本,上一次没有运行完毕,然后到时间又运行了?然后,然后,然后,后果好可怕。

我为脚本增加了两个函数shell_lock和shell_unlock非常简单,就是创建一个锁文件。然后再执行的时候先判断锁文件是否存在,如果存在说明有其它用户在执行,就退出。如果没有自己创建锁文件,开始执行,执行完毕删除锁文件。

好的,现在你可以赶紧再开一个窗口试试能不能执行这个脚本,或者到/tmp目录下看看是否创建了锁文件。请注意:如果已知的异常退出,一定也要删除这个锁文件。

让别人记住你的好!

对于一个功能脚本来说,貌似还少了点什么。对,就是注释!我们要说明白这个脚本是干啥的。或者以后你离职后,别人看到这个脚本之后,我擦,这么牛掰的脚本是谁写的呢?不要怕,写上你的大名。由于篇幅有限,就只截图一部分:

当然还有很多编写脚本的技巧,没法一一描述,不过如果能掌握上面的三种技巧,立马感觉编写的脚本有点高大上,有木有?

下载脚本模板

如果你觉得这些小技巧还比较有用,想下载下去自己用,怎么办呢。我已经放到运维社区中,请复制下面的链接打开即可。

https://www.unixhot.com/article/60

那么,最后,我们写脚本不再耍流氓了,那么其它运维工作呢?赶紧关注下方我们的微信公众号,《如何不耍流氓的做运维》系列文章正在向你走来。


©著作权归作者所有:来自51CTO博客作者mob604756f0266e的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. rust异步库-tokio的一些资源限制
  2. 自动补全、回滚!介绍一款可视化 sql 诊断利器
  3. linux系统执行读取jar包同级目录的外部配置文件
  4. 遇到应付你的面试官你怎么办?
  5. 协程相比线程到底好在哪里?
  6. Linux下性能压测之系统参数调优
  7. 基于 Swoft 协程框架的 PHP 微服务治理
  8. Ansible Playbook详解
  9. 我的开源项目——Windows PE和Linux ELF可执行文件解析工具

随机推荐

  1. 【不用框架】文件上传和下载
  2. AJAX入门这一篇就够了
  3. MyBatis之SqlSessions
  4. java8的一个新特性-Lambda表达式的详解(从
  5. HTTP触发Jenkins参数化构建
  6. java8中的一个骚操作-方法引用(使代码看起
  7. AJAX应用【股票案例、验证码校验】
  8. Web开发模式【Mode I 和Mode II的介绍、
  9. web_bash笔记5
  10. 图书管理系统【部署开发环境、解决分类、