Chinaunix

标题: 急!关于SHELL中表达式结果的实现! [打印本页]

作者: siqun2008    时间: 2008-08-10 10:06
标题: 急!关于SHELL中表达式结果的实现!
请问,shell中如何实现,比如参数sum=(a>b)&&(a>c)||(d<e),这里的表达式可能有多个参数,
比如:sum=(a>b)&&(a>c)
或者:sum=(a>b)||(d<e)
或者:sum=(a>b)&&(a>c)||(d<e)&&(e<f)
想了半天,像sql语句中这个也没办法实现,不知道该怎么弄了?不管后面的表达式怎么复杂,我只需要得到结果,不知哪位有没有好的办法?
作者: 爱知    时间: 2008-08-10 10:42
试试
((...))
作者: siqun2008    时间: 2008-08-10 10:47
原帖由 爱知 于 2008-8-10 10:42 发表
试试
((...))



能否说的详细点?能举个例子吗?
作者: 爱知    时间: 2008-08-10 10:51
sum=$(( (a>b)&&(a>c) ))
作者: siqun2008    时间: 2008-08-10 11:11
原帖由 爱知 于 2008-8-10 10:51 发表
sum=$(( (a>b)&&(a>c) ))


是这样吗?
a=6
b=4
c=8
sum=$(($a>$b)&&($a>$c))
echo $sum

运行没通过,是不是哪里有问题,请指教?
作者: 爱知    时间: 2008-08-10 11:18
标题: 回复 #5 siqun2008 的帖子
按原式写
sum=$(( (a>b)&&(a>c) ))
echo $sum
作者: siqun2008    时间: 2008-08-10 11:58
原帖由 爱知 于 2008-8-10 11:18 发表
按原式写
sum=$(( (a>b)&&(a>c) ))
echo $sum


另外再请问一下,SHELL中strcmp($a,$b)如何实现啊?谢谢!
作者: 爱知    时间: 2008-08-10 15:08
原帖由 siqun2008 于 2008-8-10 11:58 发表


另外再请问一下,SHELL中strcmp($a,$b)如何实现啊?谢谢!

[ "$a" = "$b" ]
作者: ly5066113    时间: 2008-08-10 16:09
原帖由 siqun2008 于 2008-8-10 10:06 发表
请问,shell中如何实现,比如参数sum=(a>b)&&(a>c)||(db)&&(a>c)
或者:sum=(a>b)||(db)&&(a>c)||(d


啥意思?
表达式的结果就是0或1。
作者: siqun2008    时间: 2008-08-11 08:24
原帖由 ly5066113 于 2008-8-10 16:09 发表


啥意思?
表达式的结果就是0或1。


你说的没错,最终的结果要么是0,要么是1。现在主要的问题就是表达式不确定,它可以包含许多比较符,比如:>=,>,<=,<,==,!=。说的更加通俗一点就是有整形,浮点型,字符串型数据的比较。不知道有什么好的建议?期待中。。。
作者: siqun2008    时间: 2008-08-11 08:25
原帖由 爱知 于 2008-8-10 15:08 发表

[ "$a" = "$b" ]



我想通过表达式作为入参,这样子估计不行吧?
作者: ly5066113    时间: 2008-08-11 09:02
原帖由 siqun2008 于 2008-8-11 08:24 发表


你说的没错,最终的结果要么是0,要么是1。现在主要的问题就是表达式不确定,它可以包含许多比较符,比如:>=,>,


那就用awk吧,shell本身处理不了浮点型。
作者: 爱知    时间: 2008-08-11 09:04
原帖由 siqun2008 于 2008-8-11 08:25 发表



我想通过表达式作为入参,这样子估计不行吧?

入参是什么意思
是利用表达式对变量赋值吗
如果是
利用此方法,我也不知道
可以尝用 试利 bc , awk 命令
但现在我对这些命令不是太熟悉
或直接写个 c 程序,应该不是太难吧
作者: siqun2008    时间: 2008-08-11 10:59
原帖由 ly5066113 于 2008-8-11 09:02 发表


那就用awk吧,shell本身处理不了浮点型。



awk,呵呵,不是蛮懂,如果表达式是sum=(a>b)&&(e<=f)||(strcmp(g,h))&&(m<n)||(p>=w)||(t==r)||(k!=x),
其中a=4,b=3,e=6.51,f=3.47,g="123",h="456",m=8,n=9,p=6,w=7,t=5,r=4,k=3,x=2
这个怎么弄啊?
作者: waker    时间: 2008-08-11 11:04
原帖由 siqun2008 于 2008-8-11 10:59 发表



awk,呵呵,不是蛮懂,如果表达式是sum=(a>b)&&(e


怎么弄?
如果自己想弄就看基础12篇或新手导航
如果想让别人弄就央咯别人
作者: 爱知    时间: 2008-08-11 15:25
标题: 回复 #14 siqun2008 的帖子
用 if [...] 结构 代替 strcmp(g,h) 应该可以
作者: eeeef    时间: 2008-08-11 15:30
用C,更符号LZ的要求
作者: siqun2008    时间: 2008-08-12 16:39
原帖由 eeeef 于 2008-8-11 15:30 发表
用C,更符号LZ的要求



问一个比较简单的问题:shell里面怎么把得到的值返回?
比如test.sh的代码:
result=$((($1)))
echo $result

我在执行test.sh 9>6之后,想把得到的值:1通过C代码里面调用这个shell得到,C代码里面咋弄啊?
作者: ly5066113    时间: 2008-08-12 16:50
原帖由 siqun2008 于 2008-8-12 16:39 发表



问一个比较简单的问题:shell里面怎么把得到的值返回?
比如test.sh的代码:
result=$((($1)))
echo $result

我在执行test.sh 9>6之后,想把得到的值:1通过C代码里面调用这个shell得到,C代码里面 ...


这个应该到C版去问。
作者: 爱知    时间: 2008-08-12 16:52
标题: 回复 #18 siqun2008 的帖子
应该用 return




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2