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. java字符串分解 StringTokenizer用法
  2. 深度:语音技术革命正在改变人类的交流方式
  3. 各种有return的情况下try-catch-finally的执行顺序
  4. ssh错误 server not ready for puppeth err=“ssh: handshake failed: ssh: unable to authenticate... 解决方法
  5. 定义一个栈(Stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构
  6. CSS学习笔记(十四) 我们前端是怎么跟设计师沟通的
  7. 如何用Netty实现一个轻量级的HTTP代理服务器
  8. ie11浏览器不能显示最新修改的程序,调试出现代码逻辑错误却依旧执行
  9. UE4 HTC VIVE - 番外篇 - 局域网联机三
  10. python读excel并写入_Python 写入和读取Excel数据
  11. 颜色对照表(五)(16进制、RGB、CMYK、HSV、中英文名)
  12. Word自动生成的目录超出页边距
  13. 苹果手机网速慢_都2020年了,该不该换5G手机?
  14. 自动发货-用千牛如何做到发货号自动转接人工号
  15. vue导入excel进度条_纯前端 vue+ js-xlsx 导入excel表格
  16. EndNote的安装与使用
  17. 智学网登录不了java_智学网常见问题解答
  18. 二项分布的期望值 E(n)=np 推导
  19. web使用openoffice实现在线预览office文档
  20. 关于input框的兼容性问题

热门文章

  1. 【FFmpeg】函数详解(二)
  2. android 蓝牙耗电量,外媒测试手机蓝牙耗电情况:近乎毫无影响
  3. python如何定义类_Python 面向对象
  4. python函数的基础知识_Python入门基础知识点(函数进阶)
  5. mysql占用资源最小的语句_MySQL一个语句查出各种整形占用字节数及最大最小值的实例...
  6. python文本编码转换_Python: 转换文本编码
  7. 【工具软件】webstorm如何使用快捷键生成固定代码
  8. js 获取当前时间 随记
  9. React 创建组件 使用组件 2
  10. Axure8.0 网页 or App 鼠标滚动效果