Читать «Краткое введение в программирование на Bash» онлайн - страница 5

Гарольд Родригес

$./bar.sh

cp: /etc/foo: No such file or directory

Готово

Таким образом, как вы видите, есть проблема. Не у каждого, кто будет запускать вашу программу, будет файл/etc/foo. Наверное, было бы лучше, если б ваша программа сначала проверяла наличие данного файла, а затем при положительном ответе — выполняла бы копирование, в противном случае — просто бы завершала работу. В псевдо-коде это выглядит так:

если /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:

Ключи команды test:

-d проверяет наличие файла и то, что он является каталогом

-e проверяет существование файла

-f проверяет наличие файла и то, что это обычный файл

-g проверяет наличие у файла SGID-бита

-r проверяет наличие файла и то, что он доступен на чтение

-s проверяет наличие файла и то, что его размер больше нуля

-u проверяет наличие у файла SUID-бита

-w проверяет наличие файла и то, что он доступен на запись

-x проверяет наличие файла и наличие у него прав на запуск

Оператор else используется, когда вы хотите, чтобы ваша программа еще что-то делала, если первое условие не выполняется. Существует также оператор elif, который может использоваться вместо еще одного if.elif означает «else if». Он используется, когда первое условие не выполняется, и вы хотите проверить еще одно условие.