shell while 循环 错误 ambiguous redirect 及while 循环变量赋值失效问题
while 循环变量赋值失效问题
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 会丢失换行符
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 ambiguous redirect,
修改为
heal_info=`gluster volume heal ceshiRep info summary |grep 'Total Number'`
echo "$heal_info"| while read line # echo $heal_info 会丢失换行符
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") # 注意 两个< 中间要有空格。
解决count变量自增问题。
参考:
[1]: https://www.linuxquestions.org/questions/linux-software-2/while-loop-bash-arrays-and-multiline-awk-ambiguous-redirect-4175614116/*