Краткое введение в программирование на Bash | страница 6
>если /etc/foo существует, то
>скопировать /etc/foo в текущую директорию
>напечатать "Готово" на экране
>в противном случае,
>напечатать на экране "Этот файл не существует"
>выход
Можно ли это сделать в Bash? Конечно! Набор управляющих операторов Bash включает в себя:if, while, until, for и case. Каждый из этих операторов является парным, то есть начинается он одним тегом и заканчивается другим. Например, если условный оператор if начинается с if и заканчивается fi. Управляющие операторы — это не отдельные программы в системе, они встроены в bash.
if … else … elif … fi
Это один из наиболее распространенных операторов. Он позволяет программе принимать решения следующим образом — «если условие верно — делаем одно, если нет — делаем что-то другое». Чтобы эффективно его использовать, сначала нужно научиться пользоваться командой test. Эта программа выполняет проверку условия (например, существует ли файл, есть ли необходимые права доступа). Вот переписанный вариант bar.sh:
>#!/bin/bash
>if test -f /etc/foo
>then
># Файл существует, копируем его и печатаем сообщение на экране
>cp /etc/foo .
>echo "Готово".
>else # Файл не существует, поэтому мы печатаем сообщение
># и завершаем работу
>echo "Этот файл не существует."
>exit
>fi
Обратите внимание на отступы строки после then и else. Они не являются обязательными, но зато делают чтение кода гораздо более простым в том смысле, что делают логику программы более наглядной. Теперь запустите программу. Если у вас есть файл /etc/foo — он будет скопирован, в противном случае будет напечатано сообщение об ошибке. Команда test проверяет существование файла. Ключ -f проверяет, является ли аргумент обычным файлом. Ниже приведен список опций test[7]:
Ключи команды test:
>-d проверяет наличие файла и то, что он является каталогом
>-e проверяет существование файла
>-f проверяет наличие файла и то, что это обычный файл
>-g проверяет наличие у файла SGID-бита
>-r проверяет наличие файла и то, что он доступен на чтение
>-s проверяет наличие файла и то, что его размер больше нуля
>-u проверяет наличие у файла SUID-бита
>-w проверяет наличие файла и то, что он доступен на запись
>-x проверяет наличие файла и наличие у него прав на запуск
Оператор else используется, когда вы хотите, чтобы ваша программа еще что-то делала, если первое условие не выполняется. Существует также оператор elif, который может использоваться вместо еще одного if.elif означает «else if». Он используется, когда первое условие не выполняется, и вы хотите проверить еще одно условие.