编写bash脚本来读取,比较和验证外部IP地址。需要帮忙

时间:2010-01-29 18:07:10

标签: bash

我是一个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: `.'

谢谢!

3 个答案:

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