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변수의 값이 무엇인지 확인하려면 스크립트를 살펴보고 파일을 살펴보세요.

파일의 내용은 파일을 보유하는 변수에 자동으로 복사되지 않습니다.이름파일 이름. cat나중에 스크립트에서 수행할 것처럼 파일을 읽으려면 예를 들어 사용해야 합니다. 예를 들어

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

가능하다면 변수 이름을 바꾸는 것을 고려해 볼 수도 있습니다 STATUSFILE.

관련 정보