1. ホーム
  2. シェル

シェルwhileループのエラー曖昧なリダイレクトとwhileループの変数割り当て失敗問題

2022-02-12 01:17:47
<パス

shell while loop error ambiguous redirect and while loop variable assignment failure 問題が発生する。

while loop 変数代入失敗問題


heal_info=`gluster volume heal ceshiRep info summary |grep 'Total Number'`   
   echo "$heal_info"| while read line
    do
        numStr=`echo $line|awk -F ":" '{print $2}'`
        echo "numstr:"$numStr
        if [ "$numStr" ! = " 0" ];then
                echo "plau"
        else
                echo "error"
                let count++
                echo "while count:"$count
        fi
    done


パイプ文字の読み取りに問題があるため、count変数がセルフインクリメントできないことがわかります。

を以下のようにリダイレクトするように修正する必要があります。

heal_info=`gluster volume heal ceshiRep info summary |grep 'Total Number'`   
   echo "$heal_info"| while read line # echo $heal_info will lose newlines
    do
        numStr=`echo $line|awk -F ":" '{print $2}'`
        echo "numstr:"$numStr
        if [ "$numStr" ! = " 0" ];then
                echo "plau"
        else
                echo "error"
                let count++
                echo "while count:"$count
        fi
    done < $heal_info


エラー: $heal_infoのあいまいなリダイレクトです。
に変更します。

heal_info=`gluster volume heal ceshiRep info summary |grep 'Total Number'`   
   echo "$heal_info"| while read line # echo $heal_info will lose newlines
    do
        numStr=`echo $line|awk -F ":" '{print $2}'`
        echo "numstr:"$numStr
        if [ "$numStr" ! = " 0" ];then
                echo "plau"
        else
                echo "error"
                let count++
                echo "while count:"$count
        fi
    done < <(echo "$heal_info") # Note Two < with spaces in between.  


カウント変数のセルフインクリメント問題を解決する。
参考
[1]: https://www.linuxquestions.org/questions/linux-software-2/while-loop-bash-arrays-and-multiline-awk-ambiguous-redirect- 4175614116/*