
U
ser
A
nd
LINUX
Programming
ualinux.com
22
U & L
1 1 - 0 1
Переменная dots последовательно принимает значения от
1 до 10 и одновременно скрипт печатает на экране точку.
Приведенный дальше пример показывает, что я имею в
виду под выражением «переменная последовательно при-
нимает несколько значений»:
#!/bin/bash
for x in paper pencil pen; do
echo «значение переменной х равно $х»
sleep 1
done
При запуске программы, вы видите, что х сначала имеет
значение «pencil», а затем она принимает значение «pen».
Когда у переменной заканчивается список возможных зна-
чений, цикл завершается.
Ниже приведен гораздо более полезный пример. Этот
скрипт добавляет расширение .html для всех файлов в те-
кущей директории (Этот скрипт действительно так и по-
ступает и вам возможно это не нужно. Поэтому все-таки
создайте отдельного пользователя, если вы еще до сих пор
этого не сделали, и экспериментируйте под ним. – Прим.
перев.):
#!/bin/bash
for fi le in *; do
echo «Добавляем расширение .html для фай-
ла $fi le …»
mv $fi le $fi le.html
sleep 1
done
Символ * имеет специальное значение, которое в дан-
ном случае означает «все в текущем каталоге», т.е. все фай-
лы в каталоге. Переменная fi le последовательно принима-
ет значения, соответствующие именам файлов в текущем
каталоге. Затем используется программа mv для переиме-
нования файла в файл с расширением .html.
case … in … esac
Оператор case очень похож на if. Он отлично подходит
для тех случаев, когда нужно проверить несколько усло-
вий и вы не хотите для этого использовать несколько вло-
женных операторов if. Поясним на примере:
#!/bin/bash
x=5 # инициализируем х значением 5
# проверяем значение х:
case $x in
0) echo «значение х равно 0»
;;
5) echo «значение х равно 5»
;;
9) echo «значение х равно 9»
;;
*) echo «значение неизвестно»
;;
esac
Оператор case проверяет переменную х на равенство
трем значениям. В приведенном примере, он сначала про-
верит, равен ли х нулю 0, затем равен ли он 5, затем ра-
вен ли он 9. И, если все проверки завершились неудачно,
скрипт выведет сообщение, что значение x определить
не получилось. Помните, что «*» означает «все», а в этом
случае, «любое другое значение, помимо указанных явно».
Если х имеет любое другое значение, отличное от 0, 5 или
9, то это значение попадает во категорию «*». При исполь-
зовании сase каждое условие должно заканчиваться двумя
точками с запятой.
Зачем нужно использовать case, когда вы можно ис-
пользовать if? Ниже приведен пример эквивалентного
скрипта, написанного с использованием if. Решение о том,
что быстрее написать и легче прочесть, предлагается при-
нять самостоятельно ;) :
#!/bin/bash
x=5 # инициализируем х значением 5
if [ «$x» -eq 0 ]; then
echo «Значение х равно 0»
elif [ «$x» -eq 5 ]; then
echo «значение х равно 5»
elif [ «$x» -eq 9 ]; then
echo «значение х равно 9»
else
echo «Значение х определить не удалось»
fi
ИСПОЛЬЗОВАНИЕ КАВЫЧЕК
Кавычки играют важную роль в написании скриптов
оболочки. Существует три типа кавычек. Это: двойные ка-
вычки «, одинарные ' (апостроф) и обратные ` (находятся
слева от клавиши 1. – Прим. перев.). Имеет ли каждый из
приведенных видов какое-то особое значение? Да.
Примечание: Статья Wildcards, Quotes, Back Quotes,
Apostrophes in shell commands ( * ? [] ” ' ') прекрасно описы-
вает использование специальных символов. Пожалуйста,
ознакомьтесь с ней в случае, если вы не знакомы с исполь-
зованием этих специальных символов в скриптах оболоч-
ки. Ниже приведено краткое объяснение использования
некоторых из них.
Двойные кавычки используются главным образом для
объединения нескольких слов в строку и сохранения в
ней пробелов. Например, «Эта строка содержит пробелы».
Строка, заключенная в двойные кавычки рассматривается
как единое целое. Например:
mkdir hello world
ls -F