美文网首页
防错编程

防错编程

作者: jere觅 | 来源:发表于2015-11-29 18:20 被阅读0次

我相信不少学习者在用shell脚本编程的时候遇到过这样的问题,当他不注意打错了代码,脚本执行时发生意想不到的问题,导致了严重的后果。比如这个例子,原本想要删除一个目录dir中的所有文件,就输入了这两行代码:
cd /usr/diro
rm *

从本质上来说,这两行代码没有任何问题,只要是变量diro中存储的目录名字存在就可以。但是如果/usr/diro不存在,这样cd 命令会运行失败,脚本会继续执行下一行代码,将会删除当前工作目录中的所有文件。完成不是期望的结果。由于这个失误,可能会销毁服务器中的重要文件。
因此我们需要掌握防错编程,当编程的时候,验证假设非常重要。这意味着要仔细得计算脚本所使用的程序和命令的退出状态。
让我们看一些能够提高这个设计的方法。
首先,在cd 命令执行成功之后,再运行rm 命令,可能是明智的选择。
cd $dir_name && rm *

这样,如果cd 命令运行失败后,rm 命令将不会执行。这样比较好,但是仍然有可能未设置变量dir_name 或其变量值为空,从而导致删除了用户家目录下面的所有文件。这个问题也
能够避免,通过检验变量dir_name 中包含的目录名是否真正地存在:
[[ -d $dir_name ]] && cd $dir_name && rm *

通常,当某种情况(比如上述问题)发生的时候,最好是终止脚本执行,并对这种情况提示错误信息:
if [[ -d $dir_name ]]; then
if cd $dir_name; then
rm *
else
echo "cannot cd to '$dir_name'" >&2
exit 1
fi
else
echo "no such directory: '$dir_name'" >&2
exit 1
fi
这里,我们检验了两种情况,一个名字,看看它是否为一个真正存在的目录,另一个是cd命令是否执行成功。如果任一种情况失败,就会发送一个错误说明信息到标准错误,然后脚本
终止执行,并用退出状态1 表明脚本执行失败。
例如将$dir_name改为/usr/diro后执行:
jeremy@ubuntu:/usr/dir$ chmod 755 /usr/dir/fg
jeremy@ubuntu:/usr/dir$ /usr/dir/fg
no such directory: '/usr/diro'

相关文章

  • 防错编程

    我相信不少学习者在用shell脚本编程的时候遇到过这样的问题,当他不注意打错了代码,脚本执行时发生意想不到的问题,...

  • Testing and Debugging

    1. 设计程序时,目标为 defensive programming(防错型编程) Write specifica...

  • 【冠卓管理分享】生产线上怎么做“防错”?

    一、什么是防错? 防错,日文称POKA-YOKE,英文又称Error Proof 或 Fool Proof(防呆)...

  • 159天--防错第一2021-10-07

    “防错是第一,补错是第二。若不能防错,必须要补错。”这是阎锡山日记中的一段话,很受启发。 防错成本低,但是,人性常...

  • 《错不及防》

    初升的太阳看到了城市的回温 灰色头像的闪动暖了冰冷的心 抬头用手挡住刺眼的光 闭眼接受暖的洗礼 一切来的太过于突然...

  • 防呆防错Poka Yoke

    丰田公司能达到如此效果,防呆防错Poka Yoke起到了举足轻重的作用。 1 防呆法的作用 在作业过程中,作业者不...

  • 跟着左教授过造价第5天

    本周学习内容: 1、案例——招投标法 2、计量——混凝土 案例防坑放错-------多次重复、恶心难受防坑防错法 ...

  • 工作如何防错?

    见 最近公司的几个小妹总是犯错,自己紧张,作为管理者我也特别不爽。 而每当面对大的错误,我都选择不语。因为,这样严...

  • 生产线防错的改善

    生产线防错的重要性这里不重复了。生产线防错如果失效,后果就是可能造成批量的产品质量问题。 我们实际生活中,生产线防...

  • 尼尔森十大交互原则思考心得(三)

    05 防错原则(Error prevention): Even better than good error me...

网友评论

      本文标题:防错编程

      本文链接:https://www.haomeiwen.com/subject/xsqjhttx.html