如果shell脚本中的条件如何在内部分配变量

时间:2015-11-18 11:41:16

标签: bash shell if-statement echo

我想知道如何在shell脚本中的块中分配一个变量..

以下是我的代码..

if [[ -z "$MMBOX_PATH" || -z "$BACKUP_PATH" || -z "$REMOTE_SERVER" || -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

只要找到空变量,上面的代码就会运行,但我也想知道哪个变量是空的(例如,在上面的代码中假设LOG_PATH变量为空,那么它应该在echo输出中显示,而不是$ FLAG)< / p>

我尝试了以下代码..

if [[ `FLAG='MMBOX_PATH'` && -z "$MMBOX_PATH" || `FLAG='BACKUP_PATH'` && -z "$BACKUP_PATH" || `FLAG='REMOTE_SERVER'` && -z "$REMOTE_SERVER" || `FLAG='LOG_PATH'` && -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

但是上面的代码返回false,因此它不会在echo中打印内容。

我还尝试在条件执行之前保留FLAG变量,但每次返回'Nothing'

if FLAG='MMBOX_PATH' && [[ -z "$MMBOX_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

在上面的例子中,我在输出中得到FLAG ='MMBOX_PATH',但如果我再添加一个条件,如果没有打印(意味着我为BACKUP_PATH检查相同的东西,REMOTE_SERVER ..)

if FLAG='MMBOX_PATH' && [[ -z "$MMBOX_PATH" ]] && FLAG='LOG_PATH' && [[ -z "$LOG_PATH" ]]
then
    echo -e "Must Provide All Required Paths [$FLAG is Empty].."
    exit 1
fi

在这种情况下,即使存在MMBOX_PATH且LOG_PATH为空,也不会打印任何内容。

注意:使用if条件每个变量都可以知道哪个变量为空,但我不想用if-else条件扩展我的行我只是想知道如果阻止自己如何分配变量并打印一次条件为真。

任何人都可以帮助我如何得到空变量..? (/斌/庆典)

2 个答案:

答案 0 :(得分:3)

如果你正在做的就是检查是否可以使用函数。

check() {
for i in "$@";do
    if [[ -z "${!i}" ]]
    then
        echo -e "Must Provide All Required Paths [\$$i is Empty].."
        exit 1
    fi
done
}

check MMBOX_PATH BACKUP_PATH REMOTE_SERVER LOG_PATH

答案 1 :(得分:1)

Shell已经提供了一种语法,用于验证变量是否具有值,如果不是,则退出:

: ${MMBOX_PATH:?Must provide MMBOX_PATH}
: ${BACKUP_PATH:?Must provide BACKUP_PATH}
: ${REMOTE_SERVER:?Must provide REMOVE_SERVER}
: ${LOG_PATH:?Must provide LOG_PATH}

没有必要定义执行相同操作的check函数。

初始冒号是无操作命令; shell计算其参数,:立即退出状态为0。参数扩展用于验证命名参数是否具有值。如果没有,则打印给定的错误消息。如果shell不是交互式的,它也会以状态1退出。