[ $Server_Name=1 ]
не работает должным образом, потому что синтаксис внутри одинарных скобок не является особенным для Bash. Как обычно, переменная $Server_Name
заменяется на 1, поэтому вся команда test ( [
) видит один аргумент: строку 1=1
. Поскольку эта строка имеет ненулевую длину, test возвращает true .
Для POSIX-совместимых оболочек вы можете использовать следующие тестовые команды:
[ "$Server_Name" = 1 ]
проверяет, $Server_Name
равен ли строка 1
.
[ "$Server_Name" -eq 1 ]
Параметр проверок $Server_Name
равен числу 1
, т. е. он выполняет числовое сравнение вместо сравнения строк.
Возвращаемое значение двух команд будет отличаться, например, если вы определите Server_Name=01
. Первый вернет false, второй вернет true.
Обратите внимание, что если существует вероятность того, что переменная $Server_Name
не определена, она должна быть заключена в кавычки, иначе при вызове test выдаст ошибку.
if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...