AIX: 실제 결과를 보려면 2번 실행해야 함

AIX: 실제 결과를 보려면 2번 실행해야 함

왜 스크립트를 실행할 때마다 실제 결과를 보려면 두 번 실행해야 하는지,

script_dir=/opt/scripts/x186299

smo_log=/oracle/bxcons21/base/admin/bxcons21/scripts/logs

error_txt=$script_dir/logs/SMO_error.txt

count_error=$script_dir/logs/count_error.txt

yest=$script_dir/logs/yesterday.txt

ECount=`cat $count_error`

rm $error_txt $count_error $yest

echo `TZ=MDT+48 date +%Y%m%d` > $yest

cd $smo_log

#grep -i "Error invoking command" $yest_* >> $error_txt

echo "Error invoking command" >> $error_txt

cat $error_txt | wc -l >> $count_error

if [ $ECount = 0 ];

then

    echo "SMO Backup is failed"

    exit

else

    echo "SMO Backup is succesful"

    exit

fi


if I ran this, it will show succesfull, then if I changed this part to

old

"#grep -i "Error invoking command" $yest_* >> $error_txt

"echo "Error invoking command" >> $error_txt

new

"grep -i "Error invoking command" $yest_* >> $error_txt

"#echo "Error invoking command" >> $error_txt

올바른 실패 메시지가 표시될 것으로 예상했지만 불행하게도 성공으로 표시되었으며 변경하지 않고 스크립트를 다시 실행하면 실패 메시지가 표시됩니다.

#만 사용하면 굵게 표시되므로 grep 및 echo 줄에 "를 넣습니다.

답변1

ECount너무 일찍 설정하면 count_error스크립트가 처음 실행될 때 파일이 여전히 비어 있습니다.

ECount=`cat $count_error`
...
grep -i "Error invoking command" $yest_* >> $error_txt
...
cat $error_txt | wc -l >> $count_error
if [ $ECount = 0 ];

사용

grep -i "Error invoking command" $yest_* >> $error_txt
...
wc -l $error_txt >> $count_error
ECount=`cat $count_error`
if [ $ECount = 0 ];

대신 또는 (나중에 파일이 필요하지 않은 경우)

ECount=`wc -l $error_txt`
if [ $ECount = 0 ];

관련 정보