Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Объединение выражений

Также можно комбинировать выражения для создания более сложных оценок. Выражения комбинируются с помощью логических операторов. Мы видели это в главе 17, когда узнали о найдите команда. Есть три логических операции для тестXNUMX и [[]]. Это И, ИЛИ и НЕ. тестXNUMX и [[]] используйте разные операторы для представления этих операций:


Таблица 27-4: Логические операторы


Эксплуатация TESt [[]] и (())

Эксплуатация TESt [[]] и (())

И -a &&


изображение

OR -о ||


изображение

НЕ ! !


изображение


Вот пример операции И. Следующий сценарий определяет, находится ли целое число в диапазоне значений:



#! / Bin / Баш


# test-integer3: определить, находится ли целое число в

# указанный диапазон значений.


MIN_VAL = 1 MAX_VAL = 100


ИНТ = 50

#! / Bin / Баш


# test-integer3: определить, находится ли целое число в

# указанный диапазон значений.


MIN_VAL = 1 MAX_VAL = 100


ИНТ = 50



если [["$ INT" = ~ ^ -? [0-9] + $]]; тогда

если [[INT -ge MIN_VAL && INT -le MAX_VAL]]; затем эхо «$ INT находится в пределах от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT вне допустимого диапазона."

фи еще

echo "INT не является целым числом." > & 2 выход 1

fi


если [["$ INT" = ~ ^ -? [0-9] + $]]; тогда

если [[INT -ge MIN_VAL && INT -le MAX_VAL]]; затем эхо «$ INT находится в пределах от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT вне допустимого диапазона."

фи еще

echo "INT не является целым числом." > & 2 выход 1

fi


В этом скрипте мы определяем, является ли значение целого числа INT лежит между значениями MIN_VAL и MAX_VAL. Это выполняется однократным использованием [[]], который включает два выражения, разделенных && оператор. Мы также могли бы закодировать это, используя тестXNUMX:


if [ $ INT -ge $ MIN_VAL -a $ INT -le $ MAX_VAL ]; затем эхо «$ INT находится в пределах от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT вне допустимого диапазона."

fi

if [ $ INT -ge $ MIN_VAL -a $ INT -le $ MAX_VAL ]; затем эхо «$ INT находится в пределах от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT вне допустимого диапазона."

fi


Ассоциация ! Оператор отрицания меняет результат выражения. Он возвращает истину, если выражение ложно, и возвращает ложь, если выражение истинно. В следующем скрипте мы изменяем логику нашей оценки, чтобы найти значения INT выходящие за пределы указанного диапазона:



#! / Bin / Баш


# test-integer4: определить, находится ли целое число за пределами

# указанный диапазон значений.


MIN_VAL = 1 MAX_VAL = 100


ИНТ = 50


если [["$ INT" = ~ ^ -? [0-9] + $]]; тогда

если [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL)]]; затем эхо "$ INT находится за пределами от $ MIN_VAL до $ MAX_VAL."

еще

echo "$ INT находится в пределах досягаемости."

#! / Bin / Баш


# test-integer4: определить, находится ли целое число за пределами

# указанный диапазон значений.


MIN_VAL = 1 MAX_VAL = 100


ИНТ = 50


если [["$ INT" = ~ ^ -? [0-9] + $]]; тогда

если [[ ! (INT -ge MIN_VAL && INT -le MAX_VAL)]]; затем эхо "$ INT находится за пределами от $ MIN_VAL до $ MAX_VAL."

еще

echo "$ INT находится в пределах досягаемости."



echo "INT не является целым числом." > & 2 выход 1

fi


echo "INT не является целым числом." > & 2 выход 1

fi

Мы также заключили выражение в круглые скобки для группировки. Если бы они не были включены, отрицание применялось бы только к первому выражению, а не к их комбинации. Кодирование с помощью тестXNUMX будет сделано так:


если [ ! \ ($ INT -ge $ MIN_VAL -a $ INT -le $ MAX_VAL \)]; затем эхо «$ INT находится за пределами от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT находится в пределах досягаемости."

fi

если [ ! \ ($ INT -ge $ MIN_VAL -a $ INT -le $ MAX_VAL \)]; затем эхо «$ INT находится за пределами от $ MIN_VAL до $ MAX_VAL».

еще

echo "$ INT находится в пределах досягаемости."

fi


Поскольку все выражения и операторы, используемые тестXNUMX рассматриваются оболочкой как аргументы команды (в отличие от [[]] и (()) ), символы, которые имеют особое значение для колотить, Такие, как <, >, (качества ), должны быть заключены в кавычки или экранированы.

изображение

Видя, что тестXNUMX и [[]] делать примерно то же самое, что предпочтительнее? тестXNUMX является традиционным (и является частью POSIX), тогда как [[]] специфичен для колотить. Важно знать, как пользоваться тестXNUMX, так как он очень широко используется, но [[]] очевидно, более полезен и его легче кодировать, поэтому он предпочтительнее для современных скриптов.


Портативность - хобгоблин маленьких умов

Если вы поговорите с «настоящими» Unix-людьми, вы быстро обнаружите, что многие из них не очень любят Linux. Они считают его нечистым и нечистым. Один из принципов пользователей Unix состоит в том, что все должно быть «переносимым». Это означает, что любой сценарий, который вы пишете, должен работать без изменений в любой Unix-подобной системе.

У Unix-разработчиков есть веские основания верить в это. Увидев, что проприетарные расширения команд и оболочек сделали с миром Unix до POSIX, они, естественно, опасаются влияния Linux на их любимую ОС.

Но у портативности есть серьезный недостаток. Это мешает прогрессу. Это требует, чтобы все всегда делалось с использованием методов «наименьшего общего знаменателя». В случае программирования оболочки это означает обеспечение совместимости всего с sh, оригинальная оболочка Борна.



изображение

Этот недостаток - оправдание, которое поставщики проприетарного программного обеспечения используют для оправдания своих проприетарных расширений, только они называют их «инновациями». Но на самом деле это просто запирающие устройства для своих клиентов.

Инструменты GNU, такие как колотить, не имеют таких ограничений. Они способствуют мобильности, поддерживая стандарты и будучи общедоступными. Вы можете установить колотить и другие инструменты GNU практически в любой системе, даже в Windows, бесплатно. Так что не стесняйтесь использовать все возможности колотить. Это на самом деле портативный.


Лучшие облачные вычисления для ОС в OnWorks: