为什么我的bash如果条件不考虑第二个条件?

问题描述 投票:-1回答:1

我有以下代码段。

if [ "$2" == "azure" ] && [ -n $11 ]; then
    CRED_KIND=$2
    CRED_NAME=$3
    CRED_UNAME=$4
    CRED_PWD=$5
    TWR_UNAME=$6
    TWR_PWD=$7
    CLNT=$8
    SEC=$9
    SUBS=$10
    TEN=$11
    credsplaybook $CRED_KIND $CRED_NAME $CRED_UNAME $CRED_PWD $TWR_UNAME $TWR_PWD $CLNT $SEC $SUBS $TEN
    exit 1
fi

出于某种原因,即使当我仅传递7个参数时,它也仅考虑第一个检查就继续执行if条件,并跳过第二个检查。根据条件,它应该检查第二个参数是否为“ azure”,以及是否总共传递了11个参数。

./createResourcesPlaybook.sh cred azure test123 myuser mypass tower towerpass
[INFO] Creating Playbook for Credential with type azure

.
.
.
rest of output
bash shell rhel7
1个回答
0
投票

[[ "$2" == "azure" ] && [ -n $11 ]是链接在一起的两个不相关的命令,仅当第一个为“ true”时才执行第二个。

而且,正如其他人所提到的,两位数(或更多)的位置参数变量需要用大括号括起来。因此,$11必须为${11}

-nthe test command选项(test[的别名)是要检查string是否为空,但如果test不存在则不存在等于一个空字符串,但什么都没有,使得${11}检查无效。

要解决这两个问题,请对逻辑和两个条件使用-n选项,并使用双引号将-a设置为字符串:

${11}
© www.soinside.com 2019 - 2024. All rights reserved.