防错编程

我相信不少学习者在用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'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 100,128评论 9 468
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,355评论 2 33
  • 来自陈浩的一片老文,但绝对营养。 示例工程:3 个头文件*.h,和 8 个 C 文件*.c。 初 编译过程,源文件...
    周筱鲁阅读 10,157评论 0 17
  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 7,046评论 0 11
  • (一)基本命令 命令格式: 命令 参数 1.ls 显示文件名,等同于dos下dir命令 命令格式:ls [opti...
    飞羽孟德阅读 6,030评论 0 3

友情链接更多精彩内容