Unixのif文に関する問題

Unixのif文に関する問題

最初のスクリプトの出力を取得していますが、次の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これがあなたの意図ではない場合、声明は適切に動かされるべきです。

おすすめ記事