Shell script: 如果变量没定义

1 使用未定义变量的风险

文章[1]中给出了一个例子,

chroot=$1
...
rm -rf $chroot/usr/share/doc

运行这段代码,如果用户忘了输入参数,则系统目录下的文档全部被删掉了。

2 对策

set -u
或
set -o nounset 
前者是缩写,后者是完整表达方式。

使用“set -u”,可以使脚本在遇到未定义变量时终止运行。

3 在不确定变量是否被定义时,为其赋缺省值

格式:

变量名=${变量名:-[缺省值]}

例如:

a.sh:

#!/bin/bash

set -o nounset

# 因为VAR没定义,所以VAR被复制为缺省值abc
VAR=${VAR:-abc}
echo "\$VAR="$VAR

# 使用未定义的变量VAR,因为使用了set -o nounset,脚本被终止。
unset VAR
echo "\$VAR="$VAR

运行:

$ ./a.sh
$VAR=abc
./a.sh: line 9: VAR: unbound variable

如果不写缺省值,这下面的语句执行后,VAR为空字符串。

VAR=${VAR:-}

参考文献

1. Writing Robust Bash Shell Scripts
2. Shell script spec

你可能感兴趣的:(Shell script: 如果变量没定义)