-z str1 строка "str1" не существует (пустая). Примеры
x="who is who"; export x; [ "who is who" = "$x" ]; echo $?
x=abc ; export x ; [ abc = "$x" ] ; echo $?
x=abc ; export x ; [ -n "$x" ] ; echo $?
x="" ; export x ; [ -n "$x" ] ; echo $?
Важное замечание: Команда "test" дает значение "истина" (т.е. код завершения "0") и просто если в скобках стоит не пустое слово.
[ privet ] ; echo $?
[ ] ; echo $?
Кроме того, существуют два стандартных значения условия, которые могут использоваться вместо условия (для этого не нужны скобки).
true ; echo $?
false ; echo $?
Условия сравнения целых чисел:
x -eq y "x" равно "y",
x -ne y "x" неравно "y",
x -gt y "x" больше "y",
x -ge y "x" больше или равно "y",
x -lt y "x" меньше "y",
x -le y "x" меньше или равно "y".
То есть в данном случае команда "test" воспринимает строки символов как целые (!) числа. Поэтому во всех остальных случаях "нулевому" значению соответствует пустая строка. В данном же случае, если надо обнулить переменную, скажем, "x", то это достигается присваиванием "x=0".
Реализуются с помощью типовых логических операций:
! (not) инвертирует значение кода завершения.
-o (or) соответствует логическому "ИЛИ".
-a (and) соответствует логическому "И". ПРЕДУПРЕЖДЕНИЕ. Не забывайте о пробелах.
Примеры
[ ! privet ] ; echo $?
x=privet; export x; [ "$x" -a -f specific ] ; echo $?
x="";export x; [ "$x" -a -f specific ] ; echo $?
x="";export x; [ "$x" -a -f specific -o privet ] ; echo $?
x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $?
СОВЕТ. Не злоупотреблять сложными условиями.
6.4.2 Условный оператор "if"
В общем случае оператор "if" имеет структуру
if условие then список
[elif условие then список]
[else список]
fi
Здесь "elif" сокращенный вариант от "else if" может быть использован наряду с полным, т.е. допускается вложение произвольного числа операторов "if" (как и других операторов). Разумеется "список" в каждом случае должен быть осмысленный и допустимый в данном контексте.