if语句中的比较在使用test命令的bash中没有按预期工作

时间:2015-12-30 19:04:04

标签: bash shell scripting

我是一个正在努力获得我的第一个"如果那么"声明工作。我编造了一个总的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"

任何能够帮助我的人?谢谢你。

3 个答案:

答案 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

一般来说,内置关键字[[ ]]应该是首选,因为与测试命令相比,它不会进行全局扩展或分词,并且不易出错[

但缺点是所有shell都不支持[[ ]],而所有shell都支持测试命令[

另请阅读:What is the difference between test, [ and [[ ?进行详细讨论。

答案 1 :(得分:1)

在bash中,>不是“大于”的运算符。请改用-gt。 此外,您的if语句需要以fi而不是if结束。

bash中的

>用于重定向程序的输出。例如。 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'}
          }
        }
      }
    ]
}

比较数字