bash if-else 语句未按预期工作

bash if-else 语句未按预期工作

我有一个脚本,在其中检查执行代码(0 分配给成功和 1 分配给失败)。我使用 if-else 语句来检查执行代码是 0 还是 1。

如果是 0 我想分配文本成功给变量 RESULT。否则分配文本失败到一个变量结果。

注意:我需要在其他地方使用 RESULT 。

这是我的代码:

#!/usr/bin/env bash

set -eo pipefail
RESULT="SUCCESS"
if [ "${STATUS}" != "0" ]; then
  RESULT="FAILURE"
else
  RESULT="SUCCESS"
fi
   
cat "${STATUS}"
echo
echo ${RESULT}

然而,看起来无论我发送 0 还是 1 都无关紧要,结果总是失败。这是输出:

[e2e-st] 0
[e2e-st] 
[e2e-st] FAILURE

我期望得到 0成功,相反我得到 0失败

关于我做错了什么或者我可以采取哪些不同的做法有什么建议吗?


在这里获得帮助和解决方案后:

    - name: STATUS
      value: $(steps.step-run-script.exitCode.path)
  script: |
    #!/usr/bin/env bash
    set -eo pipefail

    echo "STATUS=$STATUS"
    ls -l "$STATUS"
    STATUSVALUE=$(cat "$STATUS")
    echo ${STATUSVALUE}

    if [ "$STATUSVALUE" -eq 0 ]; then
      echo ok
      RESULT="SUCCESS"
      echo ${STATUSVALUE}
      echo ${RESULT}
    else
      echo failed...
      RESULT="FAILURE"
      echo ${STATUSVALUE}
      echo ${RESULT}
    fi      

这就是我得到的:

[e2e-st : send-test-report-and-status-to-jira-comment] STATUS=/tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] -rw-r--r--. 1 1000 1002340000 1 Mar 10 14:03 /tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] 0
[e2e-st : send-test-report-and-status-to-jira-comment] ok
[e2e-st : send-test-report-and-status-to-jira-comment] 0
[e2e-st : send-test-report-and-status-to-jira-comment] SUCCESS

我的测试失败的另一次运行:

[e2e-st : send-test-report-and-status-to-jira-comment] STATUS=/tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] -rw-r--r--. 1 1000 1002340000 1 Mar 10 14:05 /tekton/steps/step-run-script/exitCode
[e2e-st : send-test-report-and-status-to-jira-comment] 1
[e2e-st : send-test-report-and-status-to-jira-comment] failed...
[e2e-st : send-test-report-and-status-to-jira-comment] 1
[e2e-st : send-test-report-and-status-to-jira-comment] FAILURE

十分感谢你的帮助!一切都按预期进行。

答案1

在不了解 OpenShift 或 Tekton 的任何情况下,“steps.step-run-script.exitCode.path”中的“path”一词似乎表示一个文件名,事实也是如此cat $STATUS

把类似的东西

echo "STATUS=$STATUS"
ls -l "$STATUS"

在脚本中查看变量的值$STATUS是什么,并查看文件。

文件的内容不会自动复制到保存文件的变量中姓名文件的名称,因此您需要使用 egcat来读取它,就像稍后在脚本中所做的那样。例如

STATUSVALUE=$(cat "$STATUS")
if [ "$STATUSVALUE" -eq 0 ]; then
    echo ok
else
    echo failed...
fi

如果可以的话,您还可以考虑重命名变量,这样STATUSFILE可能更具描述性。

相关内容