使用for循环增加问题

时间:2013-10-25 22:37:45

标签: bash

在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 个答案:

答案 0 :(得分:1)

如果你真的想在bash中使用浮点,那么你会发现bc很有用。

说你想要10个迭代,每个迭代大小为0.5

#!/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

答案 1 :(得分:0)

在bash中不可能使用浮点数,但你可以

#!/bin/bash

for (( i=5; $i <100; i+=10 )); do
    (( c = $i + 10 ))
    echo "${i: 0:-1}.${i: -1} + ${c: 0:-1}.${c: -1}"
done

即。将所有内容乘以10,然后打印第一个n-1数字,小数点,然后打印最后一个数字。当然,这是非常有用的。

答案 2 :(得分:0)

shell本身不支持浮动,但是如果可用,则可以使用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

答案 3 :(得分:0)

您可以使用seqbc

for i in $(seq 0.5 10);   do  
  c=$(echo "$i+1" | bc);   
  echo $i "+" $c; 
done