当前位置: 首页 > 代码生活 > 正文

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

本文固定链接: http://www.latelee.org/code-life/shell-promot-error.html

如无特别说明,迟思堂工作室文章均为原创,转载请注明: shell脚本执行命令错误处理 | 迟思堂工作室

目前暂无评论

发表评论

*

快捷键:Ctrl+Enter