쉘 스크립트에는 데이터베이스가 오프라인일 때 일찍 종료하기 위한 다음 코드가 있습니다.
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"