首页 > 解决方案 > 如何处理脚本从参数文件中读取的缺失变量

问题描述

需要关于以下内容的建议。

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

脚本.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 参数本身。如何在代码中解决这个问题?

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

标签: shell

解决方案


你可以改进你的脚本

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

推荐阅读