[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实现以下功能,但遇到了麻烦:
我遇到的问题是我的剧本只是回应了#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
答案 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)您在整个脚本中使用不同的变量。确保您在使用它们的任何地方都以相同的方式输入变量。