なぜスクリプトを実行するたびに実際の結果を見るために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 ];