Написание сценария bash для чтения, сравнения и проверки внешнего IP-адреса. Нужна помощь - PullRequest
2 голосов
/ 29 января 2010

Я новичок в 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 ]

2 голосов
/ 29 января 2010

В вашем скрипте команда 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 голос
/ 30 января 2010

сделай это с оболочкой

check="174.123.248.82"
result=$(wget -q -O - checkip.dyndns.org)
ip=${result//[^0-9.]/}
[[ "$ip" != "$check" ]] && echo "matches"
1 голос
/ 29 января 2010

Попробуйте это:

#!/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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...