shell同时满足两个的条件语句该怎么写?

这么写判断不成功是因为什么?while["${var}"!="${choice}"-a-z`grep^${choice}$1`]... 这么写判断不成功是因为什么?
while [ "${var}" != "${choice}" -a -z `grep ^${choice} $1` ]
展开
 我来答
百度网友5311d79
2013-11-15 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3216万
展开全部

判断逻辑是ok的,若grep出来为空则不存在任何问题。

只是,grep出来的有可能是多行内容,建议分开写,不要写在一行。

str=`grep ^${choice} $1`
while [ "${var}" != "${choice}" -a -z "$str" ]

先将grep的结果赋值给一个变量,然后变量放入双引号,判断是否为空。这样多行内容就不是问题。

或者,直接加个双引号也ok。

while [ "${var}" != "${choice}" -a -z "`grep ^${choice} $1`" ]

这样看起来有点闹心,毕竟不方便分段调试啊。

记住-z是用于判断字符串是否为空的,既然是字符串,任何时候都别忘记加双引号。

浦疏贤085
2013-11-15 · TA获得超过291个赞
知道答主
回答量:149
采纳率:100%
帮助的人:126万
展开全部

用&&就可以。

while [ $a=10 ] && [ $b = 20 ] ; do echo "ok"; break; done
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hrcq89
2013-11-15 · TA获得超过111个赞
知道小有建树答主
回答量:53
采纳率:100%
帮助的人:59.3万
展开全部
while ([ "${var}" != "${choice}" ] && [ -z `echo $1 | grep "^${choice}"` ])
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qmg1023
2013-11-15 · TA获得超过888个赞
知道小有建树答主
回答量:804
采纳率:0%
帮助的人:906万
展开全部
and

&&

应该都可以
更多追问追答
追问
看清楚,是shell
追答
sorry,&&单独在命令行上是可以的。

如果是bash里面是用-a

前面部分是字符串比较的话用 !=否则用 -ne表示数字比较

后面-z是判断是否是空串,即grep没有返回结果

自己再查查输入输出吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式