if [ $string1 ] # Опустим оператор -n.
echo "Строка \"string1\" не пустая."
echo "Строка \"string1\" пустая."
# Все работает прекрасно.
# Квадратные скобки -- [ ], без посторонней помощи определяют, что строка пустая.
# Тем не менее, хорошим тоном считается заключать строки в кавычки ("$string1").
# Как указывает Stephane Chazelas,
# if [ $string 1 ] один аргумент "]"
# if [ "$string 1" ] два аргумента, пустая "$string1" и "]"
if [ $string1 ] # Опять, попробуем строку без ничего.
echo "Строка \"string1\" не пустая."
echo "Строка \"string1\" пустая."
# И снова получим верный результат.
# И опять-таки, лучше поместить строку в кавычки ("$string1"), поскольку...
if [ $string1 ] # И снова, попробуем строку без ничего..
echo "Строка \"string1\" не пустая."
echo "Строка \"string1\" пустая."
# Строка без кавычек дает неверный результат!
# Спвсибо Florian Wisser, за предупреждение.
#Просмотр gz-файлов с помощью утилиты 'most'
if [ $# -eq 0 ] # то же, что и: if [ -z "$1" ]
# $1 должен существовать, но может быть пустым: zmost "" arg2 arg3
echo "Порядок использования: `basename $0` filename" >&2
# Сообщение об ошибке на stderr.
# Код возврата 65 (код ошибки).
if [ ! -f "$filename" ] # Кавычки необходимы на тот случай, если имя файла содержит пробелы.
echo "Файл $filename не найден!" >&2
# Сообщение об ошибке на stderr.
if [ ${filename##*.} != "gz" ]
# Квадратные скобки нужны для выполнения подстановки значения переменной
echo "Файл $1 не является gz-файлом!"
# Используется утилита 'most' (очень похожа на 'less').
# Последние версии 'most' могут просматривать сжатые файлы.
# Можно вставить 'more' или 'less', если пожелаете.
exit $? # Сценарий возвращает код возврата, полученный по конвейеру.
# На самом деле команда "exit $?" не является обязательной,
# так как работа скрипта завершится здесь в любом случае,
построение сложных условий проверки
exp1 -a exp2 возвращает true, если оба выражения, и exp1, и exp2 истинны.
exp1 -o exp2 возвращает true, если хотябы одно из выражений, exp1 или exp2 истинно.
Они похожи на операторы Bash && и ||, употребляемые в двойных квадратных скобках.
[[ condition1 && condition2 ]]
Операторы -o и -a употребляются совместно с командой test или внутри одинарных квадратных скобок.
if [ "$exp1" -a "$exp2" ]
Чтобы увидеть эти операторы в действии, смотрите Пример 8-3 и Пример 25-11.
7.4. Вложенные условные операторы if/then
Операторы проверки условий if/then могут быть вложенными друг в друга. Конечный результат будет таким же как если бы результаты всех проверок были объединены оператором &&.