分页: 1 / 1

各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 15:24
cavalier
#!/bin/csh
set energy = 2

if ($energy > 0.5) then
echo " you are right "
else
echo " you are wrong "
endif
运行出现错误提示:
if: Badly formed number.

如果我改if ($energy > 0.5) 为if ($energy > 1)则运行正确。

现在我要对0.5这样的小数进行大小关系判定,该怎么办?
谢谢!

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 15:36
eexpress
shell判断啊。都是整数。
如果使用bc带浮点库,用 (())语法作减法判断,还差不多吧。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 15:38
aerofox
只能做整数比较。
如果要做小数比较,你可以分别比较整数部分和小数部分,或者用bc去做减法再看结果的符号,或者想一些其它方法。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 15:54
cavalier
aerofox 写了:只能做整数比较。
如果要做小数比较,你可以分别比较整数部分和小数部分,或者用bc去做减法再看结果的符号,或者想一些其它方法。
好像没那么简单:我要实现这样的目的,麻烦你们再帮忙看看?举例:

代码: 全选

set en = (0.06 0.2)
foreach energy($en)
      if ($energy >= 0.05 && $energy < 0.15) then
         set y=3
      else if ($energy > 0.15 && $energy <= 0.25) then
         set y=4
    endif
end
当然,现在这样写是不可能实现的,原因如我刚才所述。要怎样才能实现呢?
谢谢了哈

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 16:08
yjcong
a=8

if (( 6 > `echo $a/2|bc` ));then
echo 111
else
echo 222
fi

输出结果为111

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 16:11
cavalier
yjcong 写了:a=8

if (( 6 > `echo $a/2|bc` ));then
echo 111
else
echo 222
fi

输出结果为111
非常谢谢,只可惜我对bc不熟悉,看不懂你所写的,无法做更多的修改。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 16:12
cavalier
yjcong, yjcong 写道:
a=8

if (( 6 > `echo $a/2|bc` ));then
echo 111
else
echo 222
fi

输出结果为111


非常谢谢,只可惜我对bc不熟悉,看不懂你所写的,无法做更多的修改。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 16:18
eexpress
使用bc -l

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 16:43
cavalier
eexpress 写了:使用bc -l
不懂,麻烦根据我写的给我写两条看看,我好理解。
关键是我还没有看到过关于bc的有关知识
谢了哦

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-08 22:00
aerofox
如果energy的值只能用小数(比如它是用户输入),那么可以用bc:

代码: 全选

if ( `echo "$energy >= 0.05 && $energy < 0.15" | bc` == 1 ) then
如果energy的值是如上面的例子一样由程序预先定义好的,直接换成整数就可以了:

代码: 全选

en=( 6 20 )
下面的比较也用*100后的数值。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-09 8:53
eexpress

代码: 全选

☎ [ `echo 9/2 |bc -l` \< 4 ] && echo ok || echo err
err
☎ [ `echo 9/2 |bc -l` \< 5 ] && echo ok || echo err
ok
可以不带-l的。

你搞这bt的干嘛。如果涉及浮点运算。直接perl吧。这写法很丑陋的。lin那么多脚本的选择哦。

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-09 9:13
yjcong
eexpress 写了:

代码: 全选

☎ [ `echo 9/2 |bc -l` \< 4 ] && echo ok || echo err
err
☎ [ `echo 9/2 |bc -l` \< 5 ] && echo ok || echo err
ok
可以不带-l的。

你搞这bt的干嘛
。如果涉及浮点运算。直接perl吧。这写法很丑陋的。lin那么多脚本的选择哦。
指谁呢??

Re: 各位帮我看看这个小脚本为什么会出错?

发表于 : 2008-12-13 15:13
poweroff
莫生气,生气伤身体,伤和气。

其实bt也不是什么贬义词。。