[ $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 ...