2014-09-27 2 views
-2

Я пытаюсь сделать следующее в Баш:Баш - Сравнение переменных

получить мой внешний IP

прочитать первую строку файла

сравнить оба значения

, если это не то же самое, удалите файл и заново создайте его с текущим адресом

Я действительно не знаю, почему это не удается, весь мой скрипт - это вывод моего текущего адреса и первого строка файла (который, кстати, является просто «ASD» для тестирования)

#!/bin/bash   

IP= curl http://ipecho.net/plain 
OLD= head -n 1 /Users/emse/Downloads/IP/IP.txt 
if [ "$IP" = "$OLD" ]; then 
    exit 
else 
    rm /Users/emse/Downloads/IP/IP.txt 
    $IP> /Users/emse/Downloads/IP/IP.txt 
    exit 
fi 
+0

Посмотрите на http://www.shellcheck.net/ – Cyrus

ответ

5

Некоторые очевидные проблемы в вашем скрипте:

  1. Не ставьте пробелы по обе стороны от знака равенства, если вы хочу сделать присваивание
  2. Вы хотите выход curl, head так завернуть их в обратные кавычки (`)
  3. Вы хотите написать $IP в файл, а не исполнять содержание его как команды, так echo это

Сценарий становится:

#!/bin/bash   

IP=`curl http://ipecho.net/plain` 
OLD=`head -n 1 /Users/emse/Downloads/IP/IP.txt` 
if [ "$IP" = "$OLD" ]; then 
    exit 
else 
    rm /Users/emse/Downloads/IP/IP.txt 
    echo $IP > /Users/emse/Downloads/IP/IP.txt 
    exit 
fi 
0

Отличный ответ qingbo, только чуть-чуть немного утонченности:

#!/bin/bash   

IP=`curl http://ipecho.net/plain` 
OLD=`head -n 1 /Users/emse/Downloads/IP/IP.txt` 
if [ "$IP" != "$OLD" ]; then 
    echo $IP > /Users/emse/Downloads/IP/IP.txt # > creates/truncates/replaces IP.txt 
fi 
+0

Да который очищает много. Также имя файла может быть изменено :-) – qingbo

Смежные вопросы