종료가 쉘 스크립트에서 작동하지 않습니다

종료가 쉘 스크립트에서 작동하지 않습니다

쉘 스크립트에는 데이터베이스가 오프라인일 때 일찍 종료하기 위한 다음 코드가 있습니다.

Br3trans -u / -c -f dbstate && ( echo Datenbank ist online. ; echo Nächster Schritt... ) || ( echo "Datenbank ist offline" ; exit 1 );
echo Test

데이터베이스가 오프라인인 경우 스크립트를 종료하는 대신 "test"가 표시됩니다.

어떤 아이디어가 있나요?

답변1

exit명령문은 서브쉘을 종료합니다.

한 줄의 텍스트를 확장하면 예상대로 작동하기 시작합니다.

#!/bin/bash
if Br3trans -u / -c -f dbstate
then
    echo "Datenbank ist online."
    echo "Nächster Schritt..."
else
    echo "Datenbank ist offline"
    exit 1
fi
echo Test

{...}또는 일부 셸에서는 subshell 대신 그룹화를 사용할 수 있지만 (...)가독성을 위해 제가 제공한 약간 더 긴 버전을 사용하는 것이 더 낫다고 생각합니다.

답변2

귀하의 문제는 폐쇄 그룹에 명령이 있고 exit폐쇄 ( ... )그룹 의 모든 명령을 실행한다는 것입니다.서브쉘이 명령 그룹을 위해 특별히 만들어졌습니다. 따라서 귀하의 exit명령문은 스크립트를 실행하는 기본 셸이 아닌 하위 셸에만 적용됩니다.

이 경우 "한 줄" 접근 방식 대신 명령을 명시적으로 테스트하는 것이 좋습니다.

#!/bin/bash

if Br3trans -u / -c -f dbstate
then
   echo "Datenbank ist online"
   echo "Nächster Schritt ..."
else
   echo "Datenbank ist offline"
   exit 1
fi
echo "Test"

원하는 경우 한 줄로 작성할 수 있습니다.

if Br3trans -u / -c -f dbstate; then echo "Datenbank ist online"; echo "Nächster Schritt"; else echo "Datenbank ist offline"; exit 1; fi
echo "Test"

관련 정보