Oracle 데이터베이스에 연결하여 스크립트에서 작업을 수행해야 합니다. 데이터를 덤프하기 위해 쉘 스크립트에서 expdp 명령을 사용하려고 합니다.
Vi ban.sh
expdp hr/oracle@oracle table=man directory =ban dumpfile=man.dmp
If [ $# -eq 0 ];then
echo 'fail'
fi
If [ $# -eq 1 ];then
echo 'pass'
fi
위 스크립트에서 테이블 이름에 오류가 발생하면 oracle expdp는 실패하고 스크립트의 상태 확인 블록은 "pass" 블록을 전달하지만 실패 블록은 전달하지 않습니다. 이 상황을 어떻게 처리해야 합니까?
답변1
다음 조건이 참인 경우 expdp
유틸리티는 0 종료 상태로 종료됩니다 .
내보내기 또는 가져오기 작업이 성공적으로 완료되었습니다. 오류가 있는 경우 출력 장치에 표시되지 않거나 로그 파일에 기록되지 않습니다. [인용하다:데이터 펌프 종료 코드].
그렇지 않으면 종료 상태가 0이 아닙니다. 이것은 Unix의 유틸리티 표준입니다. 0은 "성공"을 의미하며 부울 테스트의 "참" 값이기도 합니다.
따라서 스크립트에서 다음과 같이 말할 수 있어야 합니다.
if expdp ...other options...; then
echo 'Success'
else
echo 'Failure'
fi
이는 코드에서 거꾸로 테스트하고 있음을 의미합니다.
실제로 종료 코드를 표시하려면 다음을 수행하십시오.
expdp ...other options...
code=$?
echo "Exit code is $code"
if [ "$code" -eq 0 ]; then
echo 'Success'
else
echo 'Failure'
fi
echo
변경되므로 사용 $?
후 즉시 해당 값을 새 변수에 저장해야 합니다 expdp
.