我有以下代码段。
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
[[ "$2" == "azure" ] && [ -n $11 ]
是链接在一起的两个不相关的命令,仅当第一个为“ true”时才执行第二个。
而且,正如其他人所提到的,两位数(或更多)的位置参数变量需要用大括号括起来。因此,$11
必须为${11}
。
和-n
的the test
command选项(test
是[
的别名)是要检查string是否为空,但如果test
不存在则不存在等于一个空字符串,但什么都没有,使得${11}
检查无效。
要解决这两个问题,请对逻辑和两个条件使用-n
选项,并使用双引号将-a
设置为字符串:
${11}