Основы программирования в Linux
Шрифт:
Но в каждом проходе цикла вы получите следующее сообщение:
В чем ошибка?
Проблема заключается в том, что командная оболочка попыталась подставить значение переменной
В
В командной оболочке можно выполнять разнообразные виды подстановок. Часто они помогают найти красивое решение задач, требующих обработки многих параметров. Самые распространенные виды подстановок значений параметров приведены в табл. 2.18.
Таблица 2.18
Шаблон подстановки параметра | Описание |
---|---|
${парам:-значение по умолчанию} | Если у парам нет значения, ему присваивается значение по умолчанию |
${#парам} | Задается длина парам |
${парам%строка} | От конца значения парам отбрасывается наименьшая порция, совпадающая сострокой , и возвращается остальная часть значения |
${парам%%строка} | От конца значения парам отбрасывается наибольшая порция, совпадающая сострокой , и возвращается остальная часть значения |
${парам#строка} | От начала значения парам отбрасывается наименьшая порция, совпадающая сострокой , и возвращается остальная часть значения |
${парам##строка} | От начала значения парам отбрасывается наибольшая порция, совпадающая сострокой , и возвращается остальная часть значения |
Эти подстановки очень полезны при работе со строками. Последние четыре варианта, удаляющие части строк, особенно пригодятся при обработке имен файлов и путей к ним, как показано в упражнении 2.18.
В приведенном далее сценарии показано применение шаблонов при подстановках значений параметров.
У этого сценария следующий вывод:
Как это работает
Первая подстановка
Подстановка
Подстановка
Шаблон
Шаблон
Поскольку в системах UNIX и Linux многое основано на идеи фильтров, результат какой-либо операции часто должен перенаправляться вручную. Допустим, вы хотите преобразовать файлы GIF в файлы JPEG с помощью программы cjpeg:
Порой вам может потребоваться выполнить такого рода операцию над большим числом файлов. Как автоматизировать подобное перенаправление? Это очень просто:
Этот сценарий, giftojpeg, создает в текущем каталоге для каждого файла формата GIF файл формата JPEG.
Встроенные документы
Особый способ передачи из сценария командной оболочки входных данных команде — использование встроенного документа (here document). Такой документ позволяет команде выполняться так, как будто она читает данные из файла или с клавиатуры, в то время как на самом деле она получает их из сценария.
Встроенный документ начинается со служебных символов
Рассмотрим упражнение 2.19.
Простейший пример просто передает входные данные команде
Этот пример выводит на экран следующие строки:
hello
this is a here
document
Встроенные документы могут показаться странным средством, но они очень полезны, т.к. позволяют запускать интерактивные программы, например редактор, и снабжать их каким-либо заранее определенным вводом. Но особенно часто они применяются при выводе из сценария больших порций текста, как вы уже видели, и при этом позволяют избавиться от необходимости применять команду