Сравните переменную, которая может иметь числовое значение или строку как значение

У меня есть переменная с именем Seconds_Behind_Master из одного из моих скриптов. Проблема состоит в том, что эта переменная может иметь либо числовое значение, либо также может принимать строку NULL в качестве ее значения. Теперь, когда я пытаюсь выполнить этот скрипт в оболочке, он запускается, но выдает такое предупреждение:

[: Illegal number: NULL

Я считаю, что это связано с тем, что в этом случае значение равно NULL, но когда он сравнивает его с цифровым значением 60, он дает это предупреждение. Как это исправить?

1
задан 27 February 2014 в 19:26

1 ответ

Проверьте, является ли var NULL первым, а затем проверьте, является ли это >= 60. Рассмотрим этот код:

if [ "$Seconds_Behind_Master" = "NULL" ]; then
    echo "Delay is Null."
elif [ "$Seconds_Behind_Master" -ge 60 ] 2>/dev/null; then
    echo "replication delayed >= 60."
else
    echo "Seconds_Behind_Master is neither NULL or >= 60"
fi

Вы также можете заменить строку

elif [ "$Seconds_Behind_Master" -ge 60 ] 2>/dev/null; then

на

elif [[ "$Seconds_Behind_Master" -ge 60 ]]; then

, если вы предпочитаете это и используете оболочку который поддерживает синтаксис [[.

1
ответ дан 24 May 2018 в 15:59
  • 1
    Я сделал и сначала добавил условие NULL. Но что произойдет, если это примет числовое значение, скажем 65, то во время сравнения оно сначала придет к NULL, и это не вызовет ошибку снова, сказав, что NULL является строкой, и вы сравниваете ее с числом ??? – Tarun 30 October 2013 в 14:51
  • 2
    @Tarun Это не ошибка снова, потому что он проверяет, является ли он первым в NULL. Если это так, то дальнейших сравнений не производится. Я протестировал этот код со значением 65, и он отлично работает, говоря, что " replication delayed & gt; = 60 " – kiri 30 October 2013 в 15:22
  • 3
    @ minerz029 Это приведет к той же ошибке, если Seconds_Behind_Master не задано или равно, например, с blahblah. – Radu Rădeanu 30 October 2013 в 15:41

Другие вопросы по тегам:

Похожие вопросы: