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

sh/bash/dash/ksh/zsh等Shell脚本
回复
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
联系:

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

#1

帖子 cavalier » 2008-12-08 15:24

#!/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这样的小数进行大小关系判定,该怎么办?
谢谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#2

帖子 eexpress » 2008-12-08 15:36

shell判断啊。都是整数。
如果使用bc带浮点库,用 (())语法作减法判断,还差不多吧。
● 鸣学
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#3

帖子 aerofox » 2008-12-08 15:38

只能做整数比较。
如果要做小数比较,你可以分别比较整数部分和小数部分,或者用bc去做减法再看结果的符号,或者想一些其它方法。
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
联系:

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

#4

帖子 cavalier » 2008-12-08 15:54

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
当然,现在这样写是不可能实现的,原因如我刚才所述。要怎样才能实现呢?
谢谢了哈
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

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

#5

帖子 yjcong » 2008-12-08 16:08

a=8

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

输出结果为111
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
联系:

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

#6

帖子 cavalier » 2008-12-08 16:11

yjcong 写了:a=8

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

输出结果为111
非常谢谢,只可惜我对bc不熟悉,看不懂你所写的,无法做更多的修改。
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
联系:

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

#7

帖子 cavalier » 2008-12-08 16:12

yjcong, yjcong 写道:
a=8

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

输出结果为111


非常谢谢,只可惜我对bc不熟悉,看不懂你所写的,无法做更多的修改。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#8

帖子 eexpress » 2008-12-08 16:18

使用bc -l
● 鸣学
cavalier
帖子: 22
注册时间: 2008-02-22 22:17
联系:

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

#9

帖子 cavalier » 2008-12-08 16:43

eexpress 写了:使用bc -l
不懂,麻烦根据我写的给我写两条看看,我好理解。
关键是我还没有看到过关于bc的有关知识
谢了哦
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

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

#10

帖子 aerofox » 2008-12-08 22:00

如果energy的值只能用小数(比如它是用户输入),那么可以用bc:

代码: 全选

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

代码: 全选

en=( 6 20 )
下面的比较也用*100后的数值。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#11

帖子 eexpress » 2008-12-09 8:53

代码: 全选

☎ [ `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那么多脚本的选择哦。
● 鸣学
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

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

#12

帖子 yjcong » 2008-12-09 9:13

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那么多脚本的选择哦。
指谁呢??
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
poweroff
帖子: 395
注册时间: 2008-12-13 15:03

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

#13

帖子 poweroff » 2008-12-13 15:13

莫生气,生气伤身体,伤和气。

其实bt也不是什么贬义词。。
一条狗的马甲!
对不起,我承认我是一只穿着马甲的狗!
回复