`

推荐Bash提高资料:写出健壮的Bash脚本

阅读更多

写出健壮的Bash脚本

本文链接:http://codingstandards.iteye.com/blog/1458592

 

也就是在Bash中使用防御性编程。

什么是防御性编程? http://book.51cto.com/art/201110/299827.htm 写道
什么是防御性编程?

顾名思义,防御性编程是一种细致、谨慎的编程方法。为了开发可靠的软件,我们要设计系统中的每个组件,以使其尽可能地"保护"自己。我们通过明确地在代码中对设想进行检查,击碎了未记录下来的设想。这是一种努力,防止(或至少是观察)我们的代码以将会展现错误行为的方式被调用。
 

 

set -u  /  set -o nounset

对没有初始化的变量做替换时,报错退出。

help set 写道
-u Treat unset variables as an error when substituting.

        -o option-name
                nounset      same as -u

 

 

 

set -e  /  set -o errexit

如果执行命令的退出码不是0时,脚本立即退出。这样可以避免某些程序片段没有做错误检查而导致不可预期的结果。

help set 写道
-e Exit immediately if a command exits with a non-zero status.

        -o option-name
                errexit      same as -e

 

 

使用 "$VAR" 而不是 $VAR

对于引用变量,最好写在双引号中,而不是让它裸奔

 

因为VAR变量的值中包含空白时,就有可能造成程序出错

 

使用 "$@" 而不是 $@

因为如果某个参数中包含空白时,不加引号的$@会有问题,含空格的参数将会分裂成多个

 

 

处理信号 signal

在编写C代码时通常会在程序开始时使用signal()设置信号处理函数,使程序更加健壮。

在Bash中,可以使用 trap 对信号处理,比如删除临时文件、杀死进程等。

 

trap command signal [signal ...]

 

避免出现竞态条件

help set 写道
-C If set, disallow existing regular files to be overwritten
by redirection of output.

        -o option-name
                noclobber    same as -C

 

使用文件锁的情况,最好如下处理,以避免竞态条件:

if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
	trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
	#critical-section
	rm -f "$lockfile"
	trap - INT TERM EXIT
else
	echo "Failed to acquire lockfile: $lockfile"
	echo "held by $(cat $lockfile)"
fi

 

 

保持原子化(事务化)

要么全部做,要么什么都不做。

比如:下面的代码展示的将文件中的一个字符串替换成另一个字符串,保证所有文件都被替换,或者都不被替换。

思路是先把要处理的文件复制到一个临时目录,进行替换操作,然后再替换原来的。即使 Ctrl+C 终止,也不会出现部分被替换的情况。

 

cp -a /var/www /var/www-tmp
for file in $(find /var/www-tmp -type -f -name "*.html"); do
	perl -pi -e 's/www.example.net/www.example.com/' $file
done
mv /var/www /var/www-old
mv /var/www-tmp /var/www
 

更详细的内容,请参看

http://sd.csdn.net/a/20120319/313229.html

 

 

 

3
0
分享到:
评论
3 楼 五月天 2012-03-21  
收藏一下,有时间慢慢看下
2 楼 codingstandards 2012-03-21  
netkiller.github.com 写道
不错,回楼主了,这年头看帖不回的太多了。我写的帖子也没有 人 回复。。我知道楼主的心情,给你回复一下, 

谢谢支持!
1 楼 netkiller.github.com 2012-03-21  
不错,回楼主了,这年头看帖不回的太多了。我写的帖子也没有 人 回复。。我知道楼主的心情,给你回复一下, 

相关推荐

    高级Bash脚本编程指南 操作系统 - Linux - 高级Bash脚本编程指南.zip

    对于系统管理员和开发者来说,掌握高级Bash脚本编程技巧是提高工作效率的关键。这份“高级Bash脚本编程指南”涵盖了从基础到进阶的各个层面,旨在帮助用户深入理解和熟练运用Bash脚本。 首先,让我们了解一下Bash的...

    高级Bash脚本编程指南: 一本深入学习shell脚本艺术的书籍

    通过阅读《高级Bash脚本编程指南》,你可以深入理解Bash脚本的内在原理,并能够编写出高效、可靠的自动化脚本来简化日常的Linux系统管理工作。书中实例丰富,注释详细,非常适合自学和参考。同时,配合HTML格式的...

    Linux中高效编写Bash脚本的9个技巧

    ### Linux中高效编写Bash脚本的9个技巧 ...总之,以上这些技巧可以帮助开发者编写出更加高效、可靠和易于维护的Bash脚本。无论是初学者还是经验丰富的系统管理员,掌握这些基础知识都是非常有益的。

    高级Bash脚本编程指南--中文版(advance_bash_scriipt_progaming_guide).pd苹果脚本跟我学.pdff

    Bash脚本是通过Shell命令行进行自动化任务的一种方式,它允许用户编写一系列指令,形成一个可执行的脚本文件,极大地提高了工作效率。以下是一些关键的Bash脚本编程知识点: 1. **基础语法**:包括变量声明、赋值、...

    Linux Bash脚本编程大全_超清版

    Linux Bash脚本编程是Linux系统管理与自动化任务执行的核心技能之一。Bash,全称Bourne-Again SHell,是Unix及Linux操作系统中最常用的...通过深入学习这本书,你将能够编写出高效、可维护的Bash脚本来满足各种需求。

    写出健壮Bash Shell脚本的一些技巧总结

    以下是一些提高Bash脚本健壮性的关键技巧: 1. **使用`set -u`**: `set -u` 或 `set -o nounset` 是Bash的一个选项,它强制脚本在使用未定义的变量时立即退出。这有助于避免因未初始化的变量导致的潜在危险,例如...

    Python-何用Python代替Bash脚本指南

    Bash脚本在遇到错误时往往直接退出,而Python提供了异常处理机制,可以在出现错误时优雅地捕获并处理,增强了脚本的健壮性。 4. **丰富的库支持** Python拥有大量的第三方库,如`os`、`sys`、`subprocess`用于...

    一个简单的Bash脚本示例,该脚本旨在设置ROS环境、构建ROS包,并运行一个简单的ROS节点

    ### Bash脚本示例解析与ROS环境配置详解 #### 一、引言 本文将详细介绍一个简单的Bash脚本示例,该脚本主要用于设置ROS(Robot Operating System)环境、构建ROS包,并运行一个简单的ROS节点。对于机器人开发者来...

    根据MD5HASH监控LINUX的目录文件的bash脚本

    ### 根据MD5HASH监控LINUX的目录文件的bash脚本:深入解析与实践 在网络安全和系统管理领域,确保文件的完整性和安全性是一项至关重要的任务。在Linux环境中,利用脚本来自动化这一过程可以极大地提高效率和响应...

    高级Bash脚本编程指南

    **高级Bash脚本编程指南**是一本专为熟悉基础Shell编程并希望深入学习Bash特性和技巧的用户准备的指南。Bash(Bourne-Again SHell)是Linux和Unix系统中最常用的命令行解释器,它为用户提供了一种强大而灵活的方式来...

    高级Bash脚本编程指南[1].3.9.1 (杨春敏 黄毅 译)【无重复页】.pdf

    本书《高级Bash脚本编程指南》是一本深入探讨UNIX®/Linux环境下Bash Shell脚本编程的权威指南,由Mendel Cooper所著。全书内容覆盖广泛,旨在为读者提供从基础到高级的Shell编程技能,并假定读者没有任何脚本编程或...

    LinuxBash脚本编程大全

    在IT行业中,Linux Bash脚本编程是系统管理员、开发者以及自动化任务执行者不可或缺的...通过学习这本书,你将能够编写出能够自动化日常任务、简化工作流程的Bash脚本,从而提高工作效率,成为真正的Linux自动化专家。

    写出健壮的Bash脚本

    本文中我将介绍一些让bash脚本变得健壮的技术。你因为没有对变量初始化而使脚本崩溃过多少次?对于我来说,很多次。chroot=$1...rm-rf$chroot/usr/share/doc如果上面的代码你没有给参数就运行,你不会仅仅删除掉...

    bash-scripts:bash脚本的个人收藏

    在IT行业中,Bash脚本是一种非常实用的自动化工具,特别是在Linux和Unix系统中。Bash(Bourne-Again SHell)是GNU项目的一部分,是这些操作系统中的默认命令行解释器。它允许用户通过编写脚本来执行一系列命令,极大...

Global site tag (gtag.js) - Google Analytics