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

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

#!/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把日志内容
当作第一个参数传给它就可以了,赶紧试试。
[[email protected]_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脚本很容易耍流氓?
一个脚本直接就能执行?难道不是直接就能执行吗?试想,你临时编写了一个特别重要的脚本,干的事情可能有破坏性,一不小心被别人./执行了怎么办呢?而且很多时候我们一个脚本的功能可能有多个,所以我们有必要让用户可以选择进行执行。

#!/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, 我们经常是面向过程的,建议以函数为单位,这样脚本非常的清晰可读。赶紧执行以下
看看效果吧。
[[email protected]_server /mnt]# sh mysql.sh
Usage: mysql.sh {backup}

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

##################################
# $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
###################################

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

时间: 2024-10-12 06:40:52

怎么写shell脚本才能不耍流氓?的相关文章

十分钟学会写shell脚本

大家好!我是handsomecui,下面我为大家讲解一下shell脚本的写法,讲的不好的地方,欢迎大家留言拍砖. 1.在linux下会写shell脚本是非常重要的,下面我参照例子给大家展示几个脚本,顺带这学习shell 的语法: 什么时候helloworld是必不可少的,第一个脚本肯定与helloworld是离不开的: #!/bin/sh a="hello world!" num=2 echo "a is : $a num is : ${num}nd" 运行结果:

使用C#给Linux写Shell脚本

在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之后跑去群子了威吓其他群友,不就是个玩嘛,走着~~! 说起Linux中的脚本,毋庸置疑,用得最多的肯定是Shell脚本,其他的还有Python.Ruby等,估计根本没有人会想到其实C#也可以.说起C#,那可是尚方宝剑版存在,它上可写操作系统(CosmosOS.SharpOS等)下可写应用系统,桌面程序

写shell脚本遇到的问题

今天在运行SHELL脚本时,脚本报错如下: -bash: ./month_web_user_rc.sh: /bin/bash^M: bad interpreter: No such file or directory 问题原因及解决方法如下:( 摘自 esther0401) 出现上面错误的原因之一是脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 使用vim编辑器打开脚本, 运行  :set ff? 可以看到DOS或UNIX的字样. 使用 set ff=unix 把它强制为unix格式

使用阿里云服务器写shell脚本发送qq邮件的三个形式

[准备工作] IPtables的使用如下命令:(执行以下以下命令把25和465端口打开) iptables -A INPUT -p tcp --dport 25 -j ACCEPT iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT iptables -A INPUT -p tcp --dport 465 -j ACCEPT iptables -A OUTPUT -p tcp --sport 465 -j ACCEPT 要先开启 经过以上的三步我们就可以

使用C#给Linux写Shell脚本(下篇)

http://home.juedui100.com/detail/23517297.htmlhttp://home.juedui100.com/user/23517297.htmlhttp://home.juedui100.com/user/24098944.htmlhttp://home.juedui100.com/user/24109311.htmlhttp://home.juedui100.com/user/23953314.htmlhttp://home.juedui100.com/us

awk写shell分发脚本

使用hadoop或者部署hadoop的时候,经常会遇到要往其他机器上拷贝文件的情况,但是,如果单个写的话,碰巧集群又很大,会累死的,现在使用一种awk写shell脚本,速度很快 命令 awk 'BEGIN{ print "#! /bin/sh";for(i=10;i<=200;i++) print "scp -r hadoop 10.6.8."i":/usr/hadoop" }'  > scp.sh 这样就可以轻松分发10.6.8.1

学习 shell脚本之前的基础知识

转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要

linux shell脚本通过参数名传递参数值

平常在写shell脚本都是用$1,$2....这种方式来接收参数,然而这种接收参数的方式不但容易忘记且不易于理解和维护.Linux常用的命令都可指定参数名和参数值,然而我们怎样才能给自己的shell脚本也采用参数名和参数值这样的方式来获取参数值呢?而不是通过$1,$2这种方式进行获取.下面的例子定义了短参数名和长参数名两种获取参数值的方式.其实是根据getopt提供的特性进行整理而来. #!/bin/sh #说明 show_usage="args: [-l , -r , -b , -w]\ [-

shell脚本初体验

今天学习了下写shell脚本,有点激动,特此记录下(其实不难写嘛) 原因: 现在做的项目,需要多工程依赖,但是麻烦的是,并没有将多个工程自动关联上...所以,每次操作,就是先切到A 工程目录 下,更新代码,然后mvn打包..然后,切到B工程,同样更新代码,打包,...如此循环,最后才能将最终包安装至我的手机上...如此累!!多么繁杂又重复的步骤. 于是,写了个shell脚本(package.sh),帮我打包,帮我安装..yeah! ################################