1

bashスクリプトで分数または小数を使用する際に使用する特定の構文はありますか?

次のスクリプトを使用してみました。

#!/bin/bash

{

n=9

echo "$n"

for (( i=.5; $i <10; i++ ));

  do
  let "c=$i+1"
  echo $i "+" $c
done

}

これは i=1 で機能しますが、.5 を入れると構文エラーが発生します。

ループで0.5刻みで行く方法もありますか?

ありがとうございました!

4

4 に答える 4

1

本当に bash で浮動小数点を使用したい場合は、bc が便利です。

それぞれのサイズが 0.5 の 10 回の反復が必要だとします。

#!/bin/bash

Initial=1
Step=0.5
Count=10

for (( i=0; i < $Count; i++ ))
do
 Value=$(echo "$Initial + ( $Step * $i )" | bc)
 echo $Value
done

印刷します:

$ ./t.sh 
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5

または、次のように Value に基づいてループを終了します。

Initial=1
Step=0.5
Value=$Initial
TermValue=6.1

for (( i=0; $(echo "$Value < $TermValue" | bc); i++ ))
do
 Value=$(echo "$Value + $Step" | bc)
 echo $Value
done
于 2013-10-25T22:50:27.427 に答える
0

あなたは使用することができseqますbc

for i in $(seq 0.5 10);   do  
  c=$(echo "$i+1" | bc);   
  echo $i "+" $c; 
done
于 2013-10-26T06:00:44.087 に答える
0

シェル自体はフロートをサポートしませんが、利用可能な場合は bc を使用するか、ほとんどの場合利用可能な awk を使用できます。どちらも浮動小数点演算をサポートします (perl、python、およびその他のツールも同様です)。

AirBoxOmega:~ d$ printf ".%i %i 3.14\n" {1..16}
.1 2 3.14
.3 4 3.14
.5 6 3.14
.7 8 3.14
.9 10 3.14
.11 12 3.14
.13 14 3.14
.15 16 3.14

AirBoxOmega:~ d$ printf ".%i %i 3.14\n" {1..16}|awk '{print $1*$2/$3}'
0.0636943
0.382166
0.955414
1.78344
2.86624
0.420382
0.579618
0.764331

AirBoxOmega:~ d$ printf ".%i * %i /  3.14\n" {1..16}|bc -l
.06369426751592356687
.38216560509554140127
.95541401273885350318
1.78343949044585987261
2.86624203821656050955
.42038216560509554140
.57961783439490445859
.76433121019108280254
于 2013-10-26T05:43:34.220 に答える