我是一个正在努力获得我的第一个"如果那么"声明工作。我编造了一个总的bs情况作为试用但它不起作用。我已经阅读了关于如何格式化if的半个doz描述,但我不知道我可能做错了什么。
我的剧本:
#!/bin/bash
if [ 10 > $1 ]
then
printf "Too big\n"
else
printf "Too small\n"
if
我想我可以在命令行中提供任何数字作为第一个参数,脚本会告诉我一个合适的答案。没有快乐。所有我在cmd线上得到的是:
Johns-iMac:~ johnyoung$ ./test3 5
Too big
Johns-iMac:~ johnyoung$ ./test3 50
Too big
对于练习我一直在做这个剧本最终被调用" test3"
任何能够帮助我的人?谢谢你。
答案 0 :(得分:3)
>
中的if [ 10 > $1 ]
被解释为测试命令[
中的输出重定向。您可以使用内置的[[
]]
bash进行数值比较。
#!/bin/bash
if [[ 10 > $1 ]]
then
printf "Too big\n"
else
printf "Too small\n"
fi
您还可以使用-gt
(大于),-lt
(小于),-ge
(大于或等于)等数字比较:
if [[ 10 -gt $1 ]]
...
...
fi
或
if (( 10 > $1 ))
...
...
fi
一般来说,内置关键字[[
]]
应该是bash首选,因为与测试命令相比,它不会进行全局扩展或分词,并且不易出错[
。
但缺点是所有shell都不支持[[
]]
,而所有shell都支持测试命令[
。
另请阅读:What is the difference between test, [ and [[ ?进行详细讨论。
答案 1 :(得分:1)
在bash中,>
不是“大于”的运算符。请改用-gt
。
此外,您的if语句需要以fi
而不是if
结束。
>
用于重定向程序的输出。例如。 date > date.txt
会将命令“date”的输出放到文件“date.txt”
要从bash脚本开始,您可以查看本教程: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc11
答案 2 :(得分:0)
您应该使用:
{
'$and':
[
{'SubscriberState': 'ACTIVE'},
{
'SubscriptionSet': {
'$elemMatch': {
'SubscriptionId': {'$in': GoodSubscriptions},
'SeatState': {'$ne': 'ASSIGNED'}
}
}
}
]
}
比较数字