怎么写shell脚本才能不耍流氓?
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脚本才能不耍流氓?相关推荐
- linux脚本怎怎么屏蔽段落,怎么写shell脚本才能不耍流氓?
1.不记录日志的 SHELL 脚本就是耍流氓! 我们经常在工作中会遇到一个苦恼的事情,一个 Shell 脚本到底干了什么,什么时候开始执行,什么时候结束的.尤其是数据库备份,我们想知道我们的 MySQ ...
- 使用vscode写shell脚本
使用vscode写shell脚本 1.下载vscode https://az764295.vo.msecnd.net/stable/f80445acd5a3dadef24aa209168452a3d9 ...
- 五分钟包教你学会写Shell脚本
做 Java 的肯定都接触过 Linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本 ...
- xshell脚本简单代码_十分钟学会写shell脚本
大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...
- 十分钟学会写Shell脚本
大家好!我是Wudu_Eleven,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺 ...
- php shell脚本怎么写,Shell脚本编程入门
一.什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_tut for ((i=0; i<10; i++)); do tou ...
- adb echo shell 覆盖_一次写shell脚本的经历记录
点击上方"我的小碗汤",选择"置顶公众号" 精品文章,第一时间送达 redis在容器化的过程中,涉及到纵向扩pod实例cpu.内存以及redis实例的maxme ...
- 1个月增长15000 star,zx 库写shell脚本真不错~
大家好,我是若川.持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- linux shell脚本攻略第3版_「技术干货」师傅说不会写shell脚本的网安不是一个好黑客,实战...
shell脚本? 在说什么是shell脚本之前,先说说什么是shell. shell是外壳的意思,就是操作系统的外壳.我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就 ...
最新文章
- java字符串分解 StringTokenizer用法
- 深度:语音技术革命正在改变人类的交流方式
- 各种有return的情况下try-catch-finally的执行顺序
- ssh错误 server not ready for puppeth err=“ssh: handshake failed: ssh: unable to authenticate... 解决方法
- 定义一个栈(Stack)类,用于模拟一种具有后进先出(LIFO)特性的数据结构
- CSS学习笔记(十四) 我们前端是怎么跟设计师沟通的
- 如何用Netty实现一个轻量级的HTTP代理服务器
- ie11浏览器不能显示最新修改的程序,调试出现代码逻辑错误却依旧执行
- UE4 HTC VIVE - 番外篇 - 局域网联机三
- python读excel并写入_Python 写入和读取Excel数据
- 颜色对照表(五)(16进制、RGB、CMYK、HSV、中英文名)
- Word自动生成的目录超出页边距
- 苹果手机网速慢_都2020年了,该不该换5G手机?
- 自动发货-用千牛如何做到发货号自动转接人工号
- vue导入excel进度条_纯前端 vue+ js-xlsx 导入excel表格
- EndNote的安装与使用
- 智学网登录不了java_智学网常见问题解答
- 二项分布的期望值 E(n)=np 推导
- web使用openoffice实现在线预览office文档
- 关于input框的兼容性问题
热门文章
- 【FFmpeg】函数详解(二)
- android 蓝牙耗电量,外媒测试手机蓝牙耗电情况:近乎毫无影响
- python如何定义类_Python 面向对象
- python函数的基础知识_Python入门基础知识点(函数进阶)
- mysql占用资源最小的语句_MySQL一个语句查出各种整形占用字节数及最大最小值的实例...
- python文本编码转换_Python: 转换文本编码
- 【工具软件】webstorm如何使用快捷键生成固定代码
- js 获取当前时间 随记
- React 创建组件 使用组件 2
- Axure8.0 网页 or App 鼠标滚动效果