在 bash 脚本中使用分数或小数时是否需要使用某种语法?
我尝试使用以下脚本:
#!/bin/bash
{
n=9
echo "$n"
for (( i=.5; $i <10; i++ ));
do
let "c=$i+1"
echo $i "+" $c
done
}
这适用于 i=1,但是当我输入 0.5 时会产生语法错误。
还有一种方法可以在循环中以 0.5 为增量进行吗?
谢谢!
在 bash 脚本中使用分数或小数时是否需要使用某种语法?
我尝试使用以下脚本:
#!/bin/bash
{
n=9
echo "$n"
for (( i=.5; $i <10; i++ ));
do
let "c=$i+1"
echo $i "+" $c
done
}
这适用于 i=1,但是当我输入 0.5 时会产生语法错误。
还有一种方法可以在循环中以 0.5 为增量进行吗?
谢谢!
如果您真的想在 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
您可以使用seq
和bc
:
for i in $(seq 0.5 10); do
c=$(echo "$i+1" | bc);
echo $i "+" $c;
done
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
无法在 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
数字、一个小数点和最后一个数字。当然,这在有用方面是非常有限的。