ファイルを読み込んで値を収集するwhileループを持つスクリプトがあります。ループが停止した後、いくつかの変数が再び操作することができます。echoとprintfはbashのループに割り当てられた変数を出力しません
POWER=$(expect cisco_stats lab-asr9k-2 | awk '!/Total:/ || ++n <= 1' | egrep -v "show envi|CEST|RSP[0-1]")
while read -r line
do
if [[ $line == "Total:"* ]]
then t_use=$(echo "$line" | awk '{print $NF}')
continue
fi
if [[ $line == *"Type:"* ]]
then acdc=$(echo "$line" | awk '{print $NF}')
continue
fi
if [[ $line == "Total Power Capacity:"* ]]
then t_cap=$(echo "$line" | awk '{print $NF}')
continue
fi
if [[ $line == "Supply Protected Capacity"* ]]
then np1_av=$(echo "$line" | awk '{print $NF}')
npn_av="---"
break
fi
if [[ $line == "N+1 Supply Protected"* ]]
then np1_av=$(echo "$line" | awk '{print $NF}')
continue
fi
if [[ $line == "N+N Supply Protected"* ]]
then npn_av=$(echo "$line" | awk '{print $NF}')
break
fi
done <<< "$POWER"
if [[ $np1_av == *"Protected"* ]]
then np1_av="Not_Pr."
fi
if [[ $npn_av == *"Protected"* ]]
then npn_av="Not_Pr."
elif [ -z ${npn_av+x} ]
then npn_av="---"
fi
echo "$t_cap"
echo "$t_use"
echo "$acdc"
echo "$np1_av"
echo "$npn_av"
printf "%-10s %-10s %-10s %-10s %-10s\n" "Type" "Tot.cap." "In use" "N+1 prt." "N+N prt."
printf "%-10s %-10s %-10s %-10s %-10s\n" "$acdc" "$t_cap" "$t_use" "$np1_av" "$npn_av"
私は別に、各変数をエコー場合 - 私は正しい結果を参照してください。私はエコーや1行で変数をprintfのしようとすると、私は、ループの外に設定する場所のみの変数を参照してください。
4200W
1266.7
DC
Not_Pr.
---
Type Tot.cap. In use N+1 prt. N+N prt.
Not_Pr.
あなたのスクリプトまたはあなたが読んでいるコマンドの出力にDOS行末があります。 – chepner
これは問題であることを意味していますか?どのように私はこれを変更できますか? –
http://stackoverflow.com/tags/bash/info – chepner