Общая структура
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
Комментарии
Оставить комментарий
Операционная система LINUX
Термины: Операционная система LINUX