Краткое введение в программирование на 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». Он используется, когда первое условие не выполняется, и вы хотите проверить еще одно условие.