Показать статистику
0 голосов
от (280 баллов)

Приветствую коллеги! У меня возникла необходимость разобраться с некоторыми bash скриптами, и мануалов накачал и гуглил но некоторые моменты остались неясными и нормального описания я в сети не нашел, значит к примеру встречаю в скриптах такие строчки:

if [ ! -x $var ]
if [ -x $directory/$cmd ]
if [ "$NEW_PWM" -gt "$OLD_PWM" ] || [ -z "$TEMP_AT_LAST_PWM_CHANGE" ]

так вот где я только не читал везде оператор if с последующими then elif fi описывается коротко, т.е. суть его работы

но что это за параметры внутри -x, -gt, -z внутри []? И где об этом можно почитать как можно более подробно?

Кто разбирался?

231 просмотров 1 ответов

1 Ответ

0 голосов
от (540 баллов)

Код: Bash

Равно:

-eq 

Конструкция ниже сравнивает две переменные между собой:

if [ "$a" -eq "$b" ]

Не равно:

-ne 

Пример условия, при котором "а" не равно "b":

if [ "$a" -ne "$b" ]

Больше:

-gt

Если переменная "а" больше чем переменная "b": 

if [ "$a" -gt "$b" ]

Больше или равно (greater or equal):

-ge

Условие при котором "а" больше или равно "b":

if [ "$a" -ge "$b" ]

Меньше, чем (less than):

-lt

Условие, которое выполнится при условии, если переменная "а" больше чем переменная "b":

if [ "$a" -lt "$b" ]

Меньше или равно:

-le

Условие выполнится, если переменная "в" меньше или равно переменной "b":

if [ "$a" -le "$b" ]

Буквы закончились, пошли символы :) Условие "меньше":

<

Конструкция записывается внутри двойных скобок. Условие ниже выполнится, если переменная "а" меньше переменной "b":

(("$a" < "$b"))

Конструкция "вам налево" (шутка). Условие "меньше или равно":

<=

Такое условие оформляется внутри двойных круглых скобок, аналогично предыдущему примеру. Условие выполнится, если "а" меньше или равно "b":

(("$a" <= "$b"))

Условие "больше", тоже внутри двойных круглых скобок. Что сравнивается с чем интуитивно понятно (если "а" больше "бэ"):

>

Вот как это должно выглядеть в bash:

(("$a" > "$b"))

Больше или равно (внутри двойных круглых скобок)

>=

Пример:

(("$a" >= "$b"))

Cравнение строк (знак "равно"):

if [ "$a" = "$b" ]

Либо оператор "==", это синоним "=":

if [ "$a" == "$b" ]

Парочка примеров для закрепления прочитанного:

[[ $a == z* ]]    # истина, если $a начинается с символа "z" (сравнение по шаблону)
[[ $a == "z*" ]]  # истина, если $a равна z*
[ $a == z* ]      # имеют место подстановка имен файлов и разбиение на слова
[ "$a" == "z*" ]  # истина, если $a равна z*

Оператор "не равно":

!=

Пример:

if [ "$a" != "$b" ]

Меньше и больше близнецы-братья, примеры ниже:

if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]

Обратите внимание! Символ "<" необходимо экранировать внутри [ ].

Условие "больше":

if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]

Аналогично "меньше", символ ">" необходимо экранировать внутри [ ].

Проверка на пустую строку.

-z

Проверка на нулевую длину

-n

Условие того, что строка не "пустая":

-o or ||

Оператор "и". Т.е. условие выполнится, если предыдущее условие (или команда) завершились успешно:

-a and &&

Оператор -n требует, чтобы строка была заключена в кавычки внутри квадратных скобок. Как правило, проверка строк, не заключенных в кавычки, оператором ! -z, или просто указание строки без кавычек внутри квадратных скобок, проходит нормально, однако это не совсем безопасная практика, если на это смотреть с точки зрения отказоустойчивости. Обратите внимание на то, что нужно всегда заключать проверяемую строку в кавычки. Я думаю, что если у вас есть хоть минимальные знания, то вы разберётесь.

...