Linux上のbashシェルでの実数比較 (ファイルから読み込んだ値)がうまくいきません.
Linux(OpenSuse11.4)上のbashでシェルを組み,
数値データを書いたファイルを読み込んである値と実数の値を比較し,
条件分岐するというプログラムを作りたいのですが,
「(standard_in) 1: illegal character: ^M」
というエラーが出て、上手く比較が行うことができません.
以下,シェルプログラム
#!/bin/sh
i=1
while read dum
do
bc[$i]=$dum
i=`expr $i + 1`
done < bc_last.dat
step=1
max=10000.0
x=`echo "scale=15;if( ${bc[15]} < 10000.0 ) 1 else 0" | bc`
echo x= $x
if [[ $x -eq 1 ]] ; then
dis=`echo "scale=15; ${bc[15]}*${step}/${ndiv}"| bc`
echo $dis > bc.dat
else
echo ${bc[15]} >> bc.dat
fi
exit 0
読み込むファイルはこんなのです
「bc_last.dat」
tetrafile
cube2.grid.am
surfacefile
cube2.surf
pressure
.0000000
edge
0.0
0.9
0.0
0.9
0.0
0.9
distance
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
0.0
0.0
0.0
10000
10000
1.0
なお、値をファイルから読むのではなくシェル上で代入した場合にはエラーもなくうまく行うことができました.
また、Linux上ではなく、Cygwin上で実行するとうまくいきました.Linuxのbashと何が違うのでしょうか・・?
どうすればうまくプログラムを実行できるのでしょうか。どうか教えてい頂きますようお願い申し上げます.
Cygwinでは改行コードがCR+LFなのですがLinuxではLFのみです。
CR=^Mなのでそれを取り去ればいいわけですね。
取り去る方法としては
nkf -Lu bc_last.dat > lc_last.lf.dat
という風にするとlc_last.lf.datには^m(CR)がなくなりますのでこれを読み込めばうまく行くんじゃないでしょうか?
没有评论:
发表评论