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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
SHELL_NAME="$0"
SHELL_LOG="/var/log/$SHELL_NAME.log"
shell_log(){
    log_info=$1
    echo "`date '+%H:%M:%S'` : $SHELL_NAME $log_info" >> $SHELL_LOG
}
shell_log "script start excupt......."
sleep 3
shell_log "shell success........."
# 上面的脚本我编写了一个日志函数shell_log,每次记录日志,我们直接执行shell_log把日志内容
当作第一个参数传给它就可以了,赶紧试试。
[root@zabbix_server /mnt]# cat /var/log/mysql.sh.log
06:18:33 : mysql.sh script start excupt.......
06:18:36 : mysql.sh shell success.........

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

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
#!/bin/bash
# Shell Env
SHELL_NAME="shell_template.sh"
SHELL_DIR="/opt/shell"
SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
LOCK_FILE="/tmp/${SHELL_NAME}.lock"
#Write Log 
shell_log(){
    LOG_INFO=$1
    echo "$(date "+%Y-%m-%d") $(date "+%H-%M-%S") : ${SHELL_NAME} : ${LOG_INFO}" >> ${SHELL_LOG}
}
# Shell Usage
shell_usage(){
    echo $"Usage: $0 {backup}"
}
# Backup MySQL All Database with mysqldump or innobackupex
mysql_backup(){
    shell_log "mysql backup start"
    shell_log "mysql backup stop"
}
# Main Function
main(){
    case $1 in
        backup)
            mysql_backup
            ;;
        *)
            shell_usage;
    esac
}
#Exec
main $1
# 上面的脚本我们编写了shell_usage函数,用来告诉用户,这个脚本的使用方法。同时,我要强调一下
,像编写Shell, 我们经常是面向过程的,建议以函数为单位,这样脚本非常的清晰可读。赶紧执行以下
看看效果吧。
[root@zabbix_server /mnt]# sh mysql.sh
Usage: mysql.sh {backup}

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

1
2
3
4
5
6
7
8
9
##################################
# $Name:         shell_template.sh
# $Version:      v1.0
# $Function:     Backup MySQL Databases Template Script
# $Author:       Jason Zhao
# $organization: https://www.unixhot.com/
# $Create Date:  2016-08-27
# $Description:  You know what i mean,hehe
###################################

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

本文转自 运维小学生 51CTO博客,原文链接:http://blog.51cto.com/yasar/1880949,如需转载请自行联系原作者

怎么写shell脚本才能不耍流氓?相关推荐

  1. linux脚本怎怎么屏蔽段落,怎么写shell脚本才能不耍流氓?

    1.不记录日志的 SHELL 脚本就是耍流氓! 我们经常在工作中会遇到一个苦恼的事情,一个 Shell 脚本到底干了什么,什么时候开始执行,什么时候结束的.尤其是数据库备份,我们想知道我们的 MySQ ...

  2. 使用vscode写shell脚本

    使用vscode写shell脚本 1.下载vscode https://az764295.vo.msecnd.net/stable/f80445acd5a3dadef24aa209168452a3d9 ...

  3. 五分钟包教你学会写Shell脚本

    做 Java 的肯定都接触过 Linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本 ...

  4. xshell脚本简单代码_十分钟学会写shell脚本

    大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...

  5. 十分钟学会写Shell脚本

    大家好!我是Wudu_Eleven,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...

  6. php shell脚本怎么写,Shell脚本编程入门

    一.什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do tou ...

  7. adb echo shell 覆盖_一次写shell脚本的经历记录

    点击上方"我的小碗汤",选择"置顶公众号" 精品文章,第一时间送达 redis在容器化的过程中,涉及到纵向扩pod实例cpu.内存以及redis实例的maxme ...

  8. 1个月增长15000 star,zx 库写shell脚本真不错~

    大家好,我是若川.持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. linux shell脚本攻略第3版_「技术干货」师傅说不会写shell脚本的网安不是一个好黑客,实战...

    shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就 ...

最新文章

  1. python 文件操作的模块_Python之文件操作修改模块
  2. hash地址_redis中的hash扩容、渐进式rehash过程
  3. python爬取行业数据_用Python进行Web爬取数据
  4. python可以实现的功能_Python 实现某个功能每隔一段时间被执行一次的功能方法...
  5. java nextgaussian(),java.util.Random.nextGaussian()
  6. 如何用VS2005制作Web安装程序
  7. mysql 主从 通俗易懂_MySQL 主从同步架构中你不知道的“坑”(完结篇)
  8. Android小知识10则(上)(2018.8重编版)
  9. “生命游戏之父”因新冠肺炎逝世,回顾数学顽童的一生
  10. 连接和关闭资源工具类
  11. php移动文件的函数 move_uploaded_file()和copy
  12. 了解传销系列之三 : 开心门
  13. MAC jd-gui 安装
  14. 数据中台到底是什么?
  15. 2021年茶艺师(初级)考试题库及茶艺师(初级)考试技巧
  16. 使用Apache Tika实现内容分析
  17. mme 服务器位置,NB-IOT的网络架构简介
  18. 微盟电子商城网络交易系统——Day01【项目介绍、项目环境搭建、快速搭建后台管理系统】
  19. spleeter分离伴奏和人声
  20. VOC数据集的划分(训练集,验证集,测试集) 生成txt文件和标签

热门文章

  1. 图像配准----NCC
  2. 年季度月周日控件html,基于bootstrap按年、季度、年月、年月日的日历插件(原创)...
  3. python打开网页存图_python 获取网页图片 保存在本地
  4. 1 23 456c语言,2014年计算机二级考试C语言模拟题(1)
  5. python函数手册68_直接在python中检索68个内置函数?
  6. akaze特征匹配怎么去掉不合适的点_SIFT特征点
  7. Wireshark实验HTTP
  8. 小程序聊天室开发,发送文字,表情,图片,音频,视频,即时通讯,快速部署,可定制开发
  9. 【微信小程序之画布】三:手指触摸绘画椭圆
  10. [iOS]如何重新架构 JPVideoPlayer ?