shell脚本执行命令错误处理

工作有较久时间了,在公司最大有感受就是:有些部门的有些人从不看说明文档;从不看readme文件;从不看代码注释;从不看使用。一旦出错,不从自身找原因,第一个想到的,是问别人,问来问去,最终会问到当事人:当时写代码或写脚本的那个人。我遇到过好几次。有一个脚本,明明已经有readme文件说明要用root权限来执行脚本,脚本中也明明说了要用root权限。但就是不知人家没看到还是没意识到要看,经常搞错,经常问人。最终,我知错了,我不应该在脚本中没有判断出现错误的情况,我真的错了。

为了防止此类事情发生,上网找了一些资料,写了一个专门用于错误处理的函数,主要是通过执行命令的返回值$?来判断是否出错,一量出错,用红色高亮的提示信息提示人家,说出错了,并且退出程序。完整示例脚本如下:

#!/bin/sh
# 出错提示测试
#\x1b(八进制为:\033)[显示方式;前景色;背景色m 
#显示方式:0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显) 
#前景色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色) 
#背景色:40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色) 
#
#\033[0m 默认 
#\033[1;32;40m 绿色 
#033[1;31;40m 红色 

COLOR_G="\x1b[0;32m"  # green
COLOR_R="\x1b[1;31m"  # red
RESET="\x1b[0m"

STR_ERR="[Oops!! Error occurred!! Please see the message upside!!]"
STR_OK="[Job done!]"

MSG_ERR=$COLOR_R$STR_ERR$RESET
MSG_OK=$COLOR_G$STR_OK$RESET

myexit()
{
if [ $1 -eq "1" ]
then
    echo -e $MSG_ERR ;
    exit ;
fi
}

# 故意出错
cp aaa bb

ret=$?
myexit $ret

echo -e $MSG_OK

脚本中涉及到的终端的颜色的控制,在脚本中简单提了一下,如果需要详细的,请自行查阅资料。

下面是出错效果:

latelee@latelee:shell-test$ sh test.sh 
cp: 无法 stat “aaa”: 没有那个文件或目录
[Oops!! Error occurred!! Please see the message upside!!]
红色字体的信息说,出错了,请看上面的信息。上面的信息说“没有那个文件或目录”,如果从这个信息还看不出什么原因,那就没有办法了。

正确效果:

latelee@latelee:shell-test$ sh test.sh 
[Job done!]

这件事告诉我,不要指望用户会自动读你写的文档;不要指望用户按你的操作习惯来做事。凡事先完善自身,花点时间,保证自己提供的东西OK,然后方给别人折腾。贪一时之快,早晚会找到你的。

本文语法高亮由迟思堂工作室工具手动高亮。


迟记于2013-04-16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值