需要以下建议。
我正在编写一个脚本,该脚本将从参数文件中获取输入。即
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参数本身。如何用代码解决呢?
提前感谢您的建议和感谢。
答案 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