最初のスクリプトの出力を取得していますが、次のif
スクリプトではステートメントの2番目の部分の出力を取得できません。if
#!/bin/ksh
err_abc=`grep -r "XYZ" /home |wc -l`
err_AB=`grep -r "XYZ" /home` > /dev/null 2>&1
err_ERR=`grep -r "ERROR" /home |wc -l`
err_eRR=`grep -r "ERROR" /home` > /dev/null 2>&1
if [ $err_abc -gt 0 ]
then
echo "$err_AB"
else
echo "No errors found"
if [ $err_ERR -gt 0 ]
then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
fi
答え1
コードがあなたが思うように動作していると確信していますか?ロジックを見やすくするためにインデントしましょう。
if [ $err_abc -gt 0 ]; then
echo "$err_AB"
else
echo "No errors found"
if [ $err_ERR -gt 0 ]; then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
fi
2番目のブロックは、最初のブロックのテストがfalseの場合にのみif
実行されます。すべてのケースで両方のテストを実行するには、次のものを再構築する必要があります。
if [ $err_abc -gt 0 ]; then
echo "$err_AB"
else
echo "No errors found"
fi
if [ $err_ERR -gt 0 ]; then
echo "$err_eRR"
else
echo " \n No err files found"
exit 0
fi
exit 0
また、最後のステートメント句は、2番目のテストが偽の場合にのみ実行されますif
(存在する場合)。else
これがあなたの意図ではない場合、声明は適切に動かされるべきです。
答え2
変数を設定するには、多くの追加操作を実行する必要があります。再帰的に4回grepを実行します。一度だけ実行してください。
all_errs=$(grep -r -E "XYZ|ERROR" /home 2>/dev/null)
その後、この変数から追加情報を取得できます。
err_AB=$(grep "XYZ" <<< "$all_errs)
err_abc=$(wc -l <<< "$err_AB")
err_eRR=$(grep "ERROR" <<< "$all_errs")
err_ERR=$(wc -l <<<"$err_eRR")