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

ゼロが得られると予想した成功、代わりにゼロを取得します。失敗する

私が何を間違っているか、他に何ができるかについての提案がありますか?


ここで助けと解決策を得た後:

    - 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変数の値が何であるかを確認するには、スクリプトを見てファイルを見てください。

ファイルの内容は、ファイルを保持する変数に自動的にコピーされません。名前ファイル名。cat後でスクリプトで実行するようにファイルを読み取るには、たとえば使用する必要があります。例えば

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

可能であれば、変数の名前を変更することを検討してくださいSTATUSFILE

おすすめ記事