美文网首页
防错编程

防错编程

作者: 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'

    相关文章

      网友评论

          本文标题:防错编程

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