이전 명령의 실행을 확인하십시오.

이전 명령의 실행을 확인하십시오.

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.

관련 정보