如何处理脚本从参数文件读取的缺失变量

时间:2018-12-05 22:26:21

标签: shell

需要以下建议。

我正在编写一个脚本,该脚本将从参数文件中获取输入。即

script.pamfile

ARCHIVE_RETENTION=2
SKIP_DATABASES=

第一个参数的值为2,第二个参数的值为null或为空。

脚本的一部分。

grep -i ^[a-z] ${PARMFILE}| while read PARM_NAME_VALUE
do
typeset -u PARM_NAME=$(echo ${PARM_NAME_VALUE}|awk -F '=' '{print $1}')
typeset -u PARM_VALUE=$(echo ${PARM_NAME_VALUE}|awk -F '=' '{print $2}')
case ${PARM_NAME} in
ARCHIVE_RETENTION  ) ARCHIVE_RETENTION=${PARM_VALUE} ;;
SKIP_DATABASES     ) SKIP_DATABASES=${PARM_VALUE} ;;
esac
done

所以,我的问题是参数值是否为空,我可以使用 [[ -z "$var" ]],但请提出建议,如果参数文件中的参数不存在,该如何处理。这意味着参数文件中是否缺少ARCHIVE_RETENTION参数本身。如何用代码解决呢?

提前感谢您的建议和感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法改善脚本

while IFS== read PARM_NAME PARM_VALUE; do ..

或(当您的PARMFILE在=周围没有空格时)

source "${PARMFILE}"

两项改进都无法解决您的问题。
如果缺少变量,则需要使用硬编码名称进行检查。

# Check one field
grep -q "ARCHIVE_RETENTION=" "${PARMFILE}" || echo "Nope"
# check array with fields and more error handling
required=(ARCHIVE_RETENTION SKIP_DATABASES something_else use lowercase varnames)
for f in ${required[@]}; do
   grep -q "$f" || { echo "Parameter ${f} is missing"; exit 1; }
done