【问题标题】:Check if the variable is empty or not set检查变量是否为空或未设置
【发布时间】:2020-08-05 19:35:37
【问题描述】:

我有以下 shell 脚本:

#!/bin/sh

echo "Run APP deployment $LC_APP_URL"
LC_CODE=$(
  docker run --rm --name argocd-test \
    -e DO_AC=$DO_AC \
    -e K8S_CLUSTER=k8s-databaker-io \
    -e ARGO_SERVER=cd.databaker.io \
    -e ARGO_USERNAME="$ARGO_USERNAME" \
    -e ARGO_PW="$ARGO_PW" \
    -e IMAGE_URL=hub.databaker.io/ui/argo-ui-test \
    -e IMAGE_VERSION=0.1.2 \
    -e CHARTS_URL=gitlab.com/databaker.io/charts.git \
    -e GITOPS_URL=gitlab.com/databaker.io/gitops.git \
    -e APP_TYPE=ui \
    -e APP=argo-ui-test \
    -e APP_URL="$LC_APP_URL" \
    -e APP_TLS_SECRET="dev-cert-staging" \
    -e GIT_USER="$GIT_USER" \
    -e GIT_AT=$GIT_AT \
    -e NAMESPACE=dev \
    "$LC_IMAGE_NAME" /sh/main.sh
  echo $?
)

echo "????????????????????????? $LC_CODE"

if [ -z "$LC_CODE" ]; then
  echo "Exit"
  exit 1
fi

if [ "$LC_CODE" -ne 0 ]; then
  echo "Run deployment failed"
  exit 1
fi

这应该进入if [ -z "$LC_CODE" ]; 语句并打印Exit$LC_CODE 为空,因为语句 echo "????????????????????????? $LC_CODE" 显示 ?????????????????????????

如果$LC_CODE 设置或为空,如何验证?

【问题讨论】:

  • 代替echo 尝试:declare -p LC_CODE 来检查变量
  • 别打扰了。只需执行if ! docker ...。甚至只是docker ... || exit
  • 你确定你没有不小心在/sh/main.sh 后面加上一个反斜杠吗?如果你这样做了,那么 echo$? 将是 docker(或者更确切地说,main.sh)忽略的两个附加参数。
  • 您的脚本是否使用 DOS 行尾?如果是这样,那么LC_CODE 的值是一个回车符,而不是一个空字符串。

标签: bash shell


【解决方案1】:

你可以试试:

if [ "$LC_CODE" == "" ]; then
  echo "Exit"
  exit 1
fi

我认为你的变量已设置但字符串为空

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 2012-02-05
    相关资源
    最近更新 更多