Примечание:задание переменных среды подробно описано в этой статье — «Как задавать переменные среды». В статье также описаны некоторые особенности оболочки Bash.

Если вы все еще возникают проблемы с пониманием того зачем нужно использовать переменные, приведем пример:

#!/bin/bash

echo 'Значение х - 12'.

echo 'У меня есть 12 карандашей'.

echo 'Он сказал мне, что значение х равно 12'.

echo 'Мне 12 лет.'

echo 'Как получилось, что значение х равно 12?'

Хорошо, теперь предположим, что вы решите поменять значение х на 8 вместо 12. Что для этого нужно сделать? Вы должны изменить все строки кода, в которых говорится, что х равно 12. Но погодите… Есть другие строки кода, где упоминается это число, поэтому простую автозамену использовать не получится. Теперь приведем аналогичный пример, только с использованием переменных:

#!/bin/bash

x=12 # задаем переменной х значение 12

echo 'Значение х = $х'

echo 'У меня есть 12 карандашей'

echo 'Он сказал мне, что значение х равно $х'

echo 'Мне 12 лет'

echo 'Как получилось, что значение х равно $x?'

Здесь мы видим, что $x выводит текущее значение переменной х равное 12. Поэтому теперь, если вы хотите задать новое значение х равное 8, то все что вам нужно сделать, это изменить одну строчку с х=12 на х=8, и в выводе все строки с упоминанием x также изменяться. Поэтому вам не нужно руками модифицировать остальные строки. Как вы увидите позже, переменные имеют и другие способы применения.

Управляющие операторы

Управляющие операторы делают вашу программу компактнее и позволяют ей принимать решения. И, что еще более важно, они позволяют нам выполнять проверку на наличие ошибок. До сих пор все, что мы сделали, это писали скрипты, которые просто исполняют набор инструкций в файле. Например:

#!/bin/bash

cp /etc/foo .

echo ”Готово”

Это небольшой скрипт, назовем его bar.sh, копирует файл с именем /etc/foo в текущий каталог и выводит «Готово» на экране. Эта программа будет работать при одном условии — файл /etc/foo должен существовать. В противном случае вот что произойдет:

$./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[7] :

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

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

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

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

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

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

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

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

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

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

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

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату
×