管道命令一个失败时整个失败
有时候我们可能会执行类似这样的命令:
cat test.sh |grep if | cut -d ';' -f 2
三条命令一行执行,如果我们希望在其中一条失败,整个命令就失败,而避免执行后面无意义的命令,那么可以在开始设置:
set -o pipefail
不设置的情况下,cat test.sh即使执行失败了,后面的grep实际上还会继续执行,可能会导致一些意想不到的情况发生,如果不想这样的情况发生,那么这样设置是有帮助的。
对于静态变量使用readonly
通常我们会在脚本开头定义一些静态变量:
MY_PATH=/usr/bin
而为了避免MY_PATH被意外修改,可以这样:
readonly MY_PATH=/usr/bin
这样的话,一旦后面有命令尝试修改,就会报错。
#!/bin/bash
readonly MY_PATH=/usr/bin
MY_PATH=/usr/local/bin
运行一下试试:
$ ./test.sh
test.sh: 3: test.sh: MY_PATH: is read only
看,给你提示了!