Основной способ работы с оболочкой — это выполнение команд и расширение конфигураций имен файлов. Другие задачи, например выполнение арифметических операций, более сложны, так как их текст должен быть защищен от разделения слов и наличия расширения *. В сложных сценарных оболочках содержится много круглых и квадратных скобок, а также других символов.
В былые времена в статьях с практическими советами и инструкциями часто использовались длинные сценарии оболочки для добавления пользователей, скачивания и построения пакетов, резервного копирования файлов и т. д. Сегодня многие предпочитают отдельно выносить эти задачи, используя более продвинутые сценарные языки, что происходит по нескольким причинам.
О Со временем такие приложения, как adduser и aptget, автоматизировали некоторые традиционные задачи сценариев оболочки. О Сценарии оболочки плохо масштабируются, и их сложно поддерживать в порядке.
О Сценарии оболочки работают медленнее. О Синтаксис оболочки примитивен.
Первоначально Perl заполнял вакуум, пока администраторы искали более продуктивные инструменты, но теперь РНР вышел из своей сетевой ниши, a Python заслужил уважение за продуктивность. Мы напишем одно приложение на каждом из этих языков, чтобы показать вам, как они работают. В Linux доступны и некоторые другие языки, например Ruby и Tel.
Наше приложение будет искать файл /etc/passwd по имени, пользовательскому ID, размеру контрольной суммы или чемунибудь еще, что мы можем в нем найти. Вы увидите, как открывать файл, читать записи, разбирать форматы, искать образцы и печатать результаты. Затем мы рассмотрим пути избавления от части этой работы, используя оператор ! =. Вы сумеете применить эти техники к другим файлам, например к журналам и вебстраницам. Этот метод называется необратимым изменением данных, и вы, возможно, уже не раз его использовали.
Придумаем некоторые требования для нашего приложения и выразим их символическим кодом:
read a search string from the user open the places file for each line: parse the fields (columns) search the name field for a match if there's a match: print the other fields in a readable format
Сейчас многие программисты могли бы сразу же начать печатать (ктото — даже не прочитав формат данных и требования). Мы надеемся, что читатели этой книги более дисциплинированы. Им придется устранять тот беспорядок, который учинили другие программисты, и не совершать подобных ошибок самим.