bash/sh: условные операторы if и их структура (равенство/неравенство, больше и меньше и т.д.)

Практика



Общая структура

if [ выражение ]; then
else
fi

или

if [ выражение ]; then
fi

Как видно, начинается с "if", далее идет сравнение, далее "; then", и со следующей строки - операции, которые нужно выполнить при успешном сравнении.

Если нужно добавить "else" - то так и пишем на отдельной строке, после чего, со следующей строки - описание того, что нужно сделать, если сравнение не истинно.

Заканчивается это все строкой "fi".


Заметка. Частая ошибка - опускание пробелов. SH очень трепетно к этому относится и запись вида
if ["$a"!="$b"]; then
fi
работать не будет!


Вот несколько примеров:

a="value1"
b="value2"

if [ "$a" = "$b" ]; then
 echo "a равно b"
else
 echo "a не равно b"
fi

if [ -f "/home/user/thefile" ]; then
 echo "Файл в папке пользователя найден"
fi

a="value1"

if [ "$a" != "anothervalue" ]; then
 echo "переменная a не равна 'anothervalue'"
fi



Структуры "и" и "или"

Для этого используются операторы "-a" и "-o" для "и" и "или" соотетственно.

if [ "$a" = "$b" -a "$c" = "$d" ]; then
 echo "Оба выражения истинны"
fi

if [ "$a" = "$b" -o "$c" = "$d" ]; then
 echo "Одно из выражений - истинно"
fi



Инвентирование результата

Для этого используется восклицательный знак, поставленный перед сравнением (!):

if [ ! -f "/home/user/file" ]; then
 echo "Файл не найден"
fi



Теперь немного об операторах сравнения

=

Равенство строк (не чисел!). Так, "0" = "0" - истина, а вот "0" = "00" - уже ложь!

if [ "$a" = "mystring" ]; then
 echo "равно"
fi

ВНИМАНИЕ! Нельзя использовать такую запись:
if [ "$a" = "" ]; then
 echo "Это ошибка! такой скрипт не сработает!"
fi
нужно делать так:
if [ -z "$a" ]; then
 echo "Переменная a - пустая строка с нулевой длинной"
fi


!=

Неравенство строк (не чисел!).

if [ "$a" != "mystring" ]; then
 echo "не равно"
fi

ВНИМАНИЕ! Нельзя использовать такую запись:
if [ "$a" != "" ]; then
 echo "Это ошибка! такой скрипт не сработает!"
fi
нужно делать так:
if [ -n "$a" ]; then
 echo "Переменная a - НЕ пустая строка с нулевой длинной"
fi


-eq

Числовое равенство. Так, "01" -eq "1" - будет истиной.

a=123
b=0123

if [ "$a" -eq "$b" ]; then
 echo "Они равны!"
fi


-ne

Числовое неравенство.

a=123
b=234

if [ "$a" -ne "$b" ]; then
 echo "Переменная a неравна b - числовое сравнение"
fi


-gt и -ge

Больше (-gt); больше или равно (-ge) - числовое сравнение.

a=5
b=10

if [ "$b" -gt "$a" ]; then
 echo "Переменная b больше, чем a"
fi

a=5
b=10

if [ "$b" -ge "$a" ]; then
 echo "Переменная b больше или равна a"
fi


-lt и -le

Меьнше (-lt); меньше или равно (-le) - числовое сравнение.

a=5
b=10

if [ "$a" -lt "$b" ]; then
 echo "Переменная a меньше, чем b"
fi

a=5
b=10

if [ "$a" -le "$b" ]; then
 echo "Переменная a меньше или равна b"
fi


<

Строковое сравнение. Алфавитно (ASCII) меньше.

a="A"
b="B"

if [[ "$a" < "$b" ]]; then
 echo "ASCII переменной a меньше, чем b"
fi

Заметьте, что здесь мы экранируем знак "<" через двойные скобки "[[" и "]]"!

другая запись (без двойных кавычек):
if [ "$a" \< "$b" ]; then



>

Строковое сравнение. Алфавитно (ASCII) больше.

a="A"
b="B"

if [[ "$a" > "$b" ]]; then
 echo "ASCII переменной a больше, чем b"
fi

Заметьте, что здесь мы экранируем знак ">" через двойные скобки "[[" и "]]"!

другая запись (без двойных кавычек):
if [ "$a" \< "$b" ]; then



-z

Истинно если строка пустая (имеет нулевую длинну).

a=""

if [ -z "$a" ]; then
 echo "Переменная a - пустая"
fi


-n

Истинно если строка не пустая.

a="something"

if [ -n "$a" ]; then
 echo "Строка 'a' не пустая"
fi


-f

Существование файла

if [ -f "/home/user/myfile" ]; then
 echo "Файл найден"
fi


-d

Существование каталога

if [ -d "/home/user/directory" ]; then
 echo "Каталог найден"
fi
создано: 2017-05-10
обновлено: 2021-03-13
4843



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Операционная система LINUX

Термины: Операционная система LINUX