У меня есть этот сценарий оболочки, который не работает.
Входные данные:
Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi
Вывод:
Server Name is 1
Но, если я изменяю Server_Name=2
, вывод:
Server Name is 1
Когда я изменяю Server_Name
к 2
, я хочу сказать: Server Name is 2
.
Я знаю, что это if [ $Server_Name=1 ];
часть.
Как мне это исправить?
linux
bash
shell
shell-script
user2649805
источник
источник
if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...
Ответы:
Ваш скрипт указывает, что вы используете сравнение строк.
Предположим, что имя сервера может быть строкой, а не только числом.
Для сравнения строк :
if [[ "$Server_Name" == 1 ]]; then
Ноты:
Интервал = является обязательным
if [ $Server_Name=1 ]; then
НЕПРАВИЛЬНО[[...]] уменьшает количество ошибок, так как между [[и]] не происходит расширения имени пути или разделения слов.
Предпочитаю цитировать строки, которые являются "словами"
Для целочисленных сравнений :
if [[ "$Server_Name" -eq 1 ]]; then
Больше информации:
источник
[[
это синтаксис bash, и ОП спрашивал о оболочке, где это не сработалоПопробуй это:
источник
не работает должным образом, потому что синтаксис внутри одинарных скобок не является особенным для Bash. Как обычно, переменная
$Server_Name
заменяется на 1, поэтому вся команда test ([
) видит один аргумент: строку1=1
. Поскольку эта строка имеет ненулевую длину, test возвращает true .Для POSIX-совместимых оболочек вы можете использовать следующие тестовые команды:
проверяет,
$Server_Name
равен ли строка1
.Параметр проверок
$Server_Name
равен числу1
, т. е. он выполняет числовое сравнение вместо сравнения строк.Возвращаемое значение двух команд будет отличаться, например, если вы определите
Server_Name=01
. Первый вернет false, второй вернет true.Обратите внимание, что если существует вероятность того, что переменная
$Server_Name
не определена, она должна быть заключена в кавычки, иначе при вызове test выдаст ошибку.источник
Пытаться,
вывод:
источник
Простой ответ Ваш код правильный - почти. единственное, что вам не хватает, это пробелы ... (и, может быть, лишние "=")
не будет правильно вычислять.
это то, что вы ищете.
А теперь утверждение о строках против чисел. Всякий раз, когда вы ищете для сравнения, как есть / нет, то == всегда будет хорошо.
И я предполагаю, что у вас всегда есть имя сервера в виде строки, а не числа - верно? ;-)
Удачи с вашим надежным учеником кодирования.
Чао
источник