私は次のコードを書いた。
for j in `cat output_10.txt`
do
dri=`echo $j |cut -d':' -f1`
nu=`echo $j |cut -d':' -f2`
tot=`echo $j |cut -d':' -f3`
fre=`echo $j |cut -d':' -f4`
if [ $fre > 2 ]
then
echo "<td align="Center" bgcolor="#81F781"> $fre </td>" >>mailbody.html
else
echo "<td align="Center" bgcolor="#B40404"> $fre </td>" >>mailbody.html
fi
done
freの値は、9.8と同様にoutput_10.txtファイルから読み取られます。問題は、 のelse
値が 2 より小さくても条件が成立しないという点である。値が2未満の場合、条件は有効でHTMLページに赤で表示されることを$fre
望みます。$fre
else
現時点では、どちらの場合もHTMLページに緑色があります。
答え1
Bashは浮動小数点比較を実行できません。別のツールを呼び出す必要があります。ここでは、bc
bashから入力を読むことを示しています。ここにある文字列。
複数回呼び出すのではなく、read
ファイル行からフィールドを抽出するには、このコマンドを使用します。cut
二重引用符をエスケープせずに二重引用符で囲まれた文字列に含めることはできません。printf
参照をより簡単にするために使用されます。
#!/bin/bash
while IFS=: read dri nu tot fre rest_of_line; do
if [[ $(bc <<< "$fre > 2") == "1" ]]; then
color=81F781
else
color=B40404
fi
printf '<td align="Center" bgcolor="#%s">%s</td>' $color $fre >>mailbody.html
done < output_10.txt
答え2
[ $fre > 2 ]
[ $fre ]
(空)出力をファイルにリダイレクトする場合です2
。この文字は>
出力リダイレクトを導入することを覚えておいてください。
演算子を使用して-gt
数値比較を実行します[ "$fre" -gt 2 ]
。 (ところで、変数の置換には常に二重引用符を使用してください。なぜ除外すべきか理解していない限り。 ) Bashにはリダイレクトではなく比較演算子として構文解析される[[ … ]]
構文もありますが、この演算子は事前比較を実行します。つまり、文字列を比較するので。>
9 > 10
Bashは浮動小数点数をサポートしません。あなた外部プログラムを呼び出すことができます。bc
。あるいは、特殊な方法を使用して、素数を整数と比較することもできます。
fre_int=${fre%.*} # truncate the part after the decimal point
if [ "$fre_int" -ge 2 ] && [ "$fre" != 2 ]; then …