如何将命令的输出与字符串变量进行比较?

时间:2015-10-02 12:03:06

标签: bash amazon-web-services amazon-ec2

[root@ip-10-10-61-178 ~]# cat if.sh 
#!/bin/bash

VPCCIDR=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | cut -c 1-5`

我正在尝试使用bash实现以下功能,但遇到了麻烦:

  1. 卷曲AWS实例数据URL并返回本地IP的开头。例如10.10用于测试或10.20用于产品
  2. 如果curl的输出等于名为$ TESTENV的变量,则打印"这是测试"否则,如果它等于名为$ PRODENV的变量,则打印"这是Prod。如果它匹配none,那么echo" no match"。
  3. 我遇到的问题是我的剧本只是回应了#34;这是测试"无论我为TESTENV和PRODENV设置了什么值。

    #!/bin/bash
    
    #Find out what VPC we are in. e.g 10.10 or 10.50
    VPCCIDR=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | cut -c 1-5`
    
    TESTENV="10.10"
    PRODENV="10.50"
    
    if [ "$VPCCIDDR" != "$TESTENV" ]; then  
    echo "This is Test"
    elif [ "$VPCCIDDR" != "$PRODENV" ]; then
    echo "This is Prod"
    else
    echo "no match"
    fi
    

1 个答案:

答案 0 :(得分:0)

试试这个。

VPCCIDR=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4 | cut -c 1-5)

但正如评论中所述,这不会改变你的剧本。

  

据我所知,bash命令替换在技术上并不合适   不同。好吧,$(...)语法实际上允许更方便   嵌套和处理斜线不同以及改进   可读性。但没有实际的功能差异。

-Zlog(在ocomments中)

有几点需要注意。

1)我假设URL返回您的IP地址。我使用此API测试了它:$(curl -s https://api.ipify.org | cut -c 1-5)并了解到您返回了IP地址的FIRST数字。假设你有一个典型的prod / dev设置,我认为你想要检查ip的最后数字,而不是第一个,但我可能完全错了。

2)在这里你的问题是......

if [ "$VPCCIDDR" != "$TESTENV" ]; then  
echo "This is Test"

你的条件都吓坏了。您正在说..."如果我的IP与测试环境不匹配,请告诉用户我们在测试环境中。"我相信你的意思是反其道而行之。您可能希望==代替!=

3)此外,您还拥有-s标志,可防止显示错误。在浏览器中测试网址,确保它不会丢失错误。

4)您在整个脚本中使用不同的变量。确保您在使用它们的任何地方都以相同的方式输入变量。