我是一个bash新手,我在编写一个简单的脚本时遇到问题,看看调用脚本的服务器是否是我想要执行脚本的服务器。获取外部IP很容易,还有很多关于它的帖子。不过,我在使用IF语句时遇到了麻烦。
#!/bin/bash
if [ wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' -ne '174.123.248.82' ] ; then echo "matches"; fi
我做错了什么?我收到一条错误消息:
test_script.sh: line 2: [: missing `]'
sed: -e expression #3, char 4: unknown command: `.'
谢谢!
答案 0 :(得分:2)
在脚本中,IF命令在|中断。像这样改变
if [ $(wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//') != '174.123.248.82' ] ; then
echo "matches";
fi
它有两个变化:wget命令等在$(..)中。所以bash将执行该命令序列并在那里替换它的输出。然后我用!=替换-ne,因为输出不是整数。
答案 1 :(得分:1)
试试这个:
#!/bin/bash
if [ `wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'` != '174.123.248.82' ] ; then echo "matches"; fi
也就是说,将wget / sed命令行放在反引号中,以便你比较它的标准输出,并使用!=而不是-ne。
答案 2 :(得分:1)
使用shell
执行此操作check="174.123.248.82"
result=$(wget -q -O - checkip.dyndns.org)
ip=${result//[^0-9.]/}
[[ "$ip" != "$check" ]] && echo "matches"