Книга: Искусство программирования на языке сценариев командной оболочки
Пример 24-3. Комбинирование "ИЛИ-списков" и "И-списков"
Пример 24-3. Комбинирование "ИЛИ-списков" и "И-списков"
#!/bin/bash
# delete.sh, утилита удаления файлов.
# Порядок использования: delete имя_файла
E_BADARGS=65
if [ -z "$1" ]
then
echo "Порядок использования: `basename $0` имя_файла"
exit $E_BADARGS # Если не задано имя файла.
else
file=$1 # Запомнить имя файла.
fi
[ ! -f "$file" ] && echo "Файл "$file" не найден.
Робкий отказ удаления несуществующего файла."
# И-СПИСОК, выдать сообщение об ошибке, если файл не существует.
# Обратите внимание: выводимое сообщение продолжается во второй строке,
# благодаря экранированию символа перевода строки.
[ ! -f "$file" ] || (rm -f $file; echo "Файл "$file" удален.")
# ИЛИ-СПИСОК, удаляет существующий файл.
# Обратите внимание на логические условия.
# И-СПИСОК отрабатывает по true, ИЛИ-СПИСОК -- по false.
exit 0
Комбинируя "И" и "ИЛИ" списки, легко "перемудрить" с логическими условиями, поэтому, в таких случаях может потребоваться детальная отладка.
false && true || echo false # false
# Тот же результат дает
( false && true ) || echo false # false
# Но не эта комбинация
false && ( true || echo false ) # (нет вывода на экран)
# Обратите внимание на группировку и порядок вычисления условий -- слева-направо,
#+ поскольку логические операции "&&" и "||" имеют равный приоритет.
# Если вы не уверены в своих действиях, то лучше избегать таких сложных конструкций.
# Спасибо S.C.
См. Пример A-8 и Пример 7-4, иллюстрирующие использование И/ИЛИ-списков для проверки переменных.
- Пример установочного скрипта
- Пример из практики
- Восстановление "безнадежных" баз данных. InterBase Surgeon
- Основные "рычаги" управления производительностью
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Using Double Quotes to Resolve Variables in Strings with Embedded Spaces
- Пример 17-10. Блочный комментарий
- Примеры