怎么写shell脚本才能不耍流氓?

news/2024/7/8 2:44:10

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,如需转载请自行联系原作者


http://lihuaxi.xjx100.cn/news/239667.html

相关文章

es6 ... 添加属性_如何在10分钟内免费将HTTPS添加到您的网站,以及为什么您现在不止需要这样做......

es6 ... 添加属性by Ayo Isaiah通过Ayo Isaiah 如何在10分钟内免费将HTTPS添加到您的网站,以及为什么现在比以往更需要这样做 (How to add HTTPS to your website for free in 10 minutes, and why you need to do this now more than ever) Last week, Google ann…

oracle中的exists 和 not exists 用法详解

from:http://blog.sina.com.cn/s/blog_601d1ce30100cyrb.htmloracle中的exists 和 not exists 用法详解 (2009-05-14 16:58:18) 有两个简单例子,以说明 “exists”和“in”的效率问题1) select * from T1 where exists(select 1 from T2 where T1.aT2.a)…

台式计算机刚换的显示屏怎么设置,台式机怎么样切换显示器

我的台式机是双显示器,该怎么样去切换呢?下面由小编给你做出详细的台式机切换显示器方法介绍!希望对你有帮助!台式机切换显示器方法一:需要用到的硬件:1、支持双视频信号输出的显卡。如一块显卡支持VGA输出,又同时支持DVI输出。2…

CCIE-MPLS基础篇-实验手册

又一部前期JUSTECH(南京捷式泰)工程师职业发展系列丛书完整拷贝。 MPLS(Multi-Protocol Label Switching) 目录 1:MPLS 基础实验.... 3 1.1实验拓扑... 3 1.2实验需求:... 3 1.3实验步骤... 3 1.4校验…

电子界卡组构建2019_2018–2019年构建现代Android应用程序的路线图

电子界卡组构建2019Kriptofolio应用程序系列—简介 (Kriptofolio app series — Introduction) Welcome to this series of blog posts where I will be creating a modern Android app. I will use the best tools and practices available in the year 2018–2019. I am doin…

判断一个数为多少位 比如 3 是 1位 102 是3位。

12345678910111213141516//判断一个数为多少位 比如 3 是 1位 102 是3位。#include <iostream>using namespace std; int main() {int a; cout<<"input a num"<<endl; cin>>a; int t1; for(int i10;i<10000000;i*10,t) if(a<i) brea…

c# html文本编辑器,C#实现简单文本编辑器

本文实例为大家分享了C#实现简单文本编辑器的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下建立一个窗体文件&#xff0c;实现对文件的编辑保存和对txt文件的打开界面设计&#xff1a;程序源代码&#xff1a;//form1.csusing System;using System.Collections.Gener…

项目部署时网关怎么回事_使用Kubernetes部署聊天网关(或技术按预期运行时)...

项目部署时网关怎么回事by Richard Li理查德李(Richard Li) 使用Kubernetes部署聊天网关(或技术按预期运行时) (Using Kubernetes to deploy a chat gateway (or when technology works like it’s supposed to)) TL; DR (TL;DR) This is a story about what happens when clo…