Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
> <b>more $file</b>> <b>fi</b>> <b>done</b>posixThis is a file with POSIX in it - treat it well$Обратите внимание на то, как меняется знак
$>В этом примере команда
grepPOSIXmoreifileКомандная оболочка также обрабатывает групповые символы или метасимволы (часто называемые знаками подстановки). Вы почти наверняка знаете о применении символа
*?[set][^set]{}$ <b>ls my_{finger, toe}s</b>будет выводить файлы my_fingers и my_toes. Эта команда использует оболочку для проверки всех файлов в текущем каталоге. Мы вернемся к этим правилам соответствия шаблонам в конце главы, когда будем более подробно рассматривать утилиту
grepОпытные пользователи ОС Linux, вероятно, выполнят эту операцию более эффективным способом, возможно, с помощью следующей команды:
$ <b>more `grep -l POSIX *`</b>или синонимической конструкции
$<b> more $(grep -l POSIX *)</b>В дополнение команда
$ <b>grep -l POSIX * | more</b>выведет на экран имя файла, содержащего строку
POSIXgrepmoregrepЗаниматься этой канителью каждый раз, когда хочешь выполнить последовательность команд, утомительно. Нужно сохранить команды в файле, который принято называть сценарием или скриптом командной оболочки, а затем вы можете выполнять эти файлы, когда захотите.
Создание сценария
С помощью любого текстового редактора необходимо создать файл, содержащий команды. Создайте файл с именем first с таким содержимым:
#!/bin/sh# first# Этот файл просматривает все файлы в текущем каталоге# для поиска строки POSIX, а затем выводит имена# найденных файлов в стандартный вывод.for file in *do if grep -q POSIX $file then echo $file fidoneexit 0Комментарий начинается со знака
###!/bin/sh#!/bin/shОбратите внимание на абсолютный путь, заданный в комментарии. Принято сохранять его длиной не более 32 символов для обратной совместимости, поскольку некоторые старые версии ОС UNIX могут использовать только такое ограниченное количество символов в комментарии
#!Поскольку сценарий по существу обрабатывается как стандартный ввод командной оболочки, он может содержать любые команды ОС Linux, на которые ссылается переменная окружения
PATHКоманда
exitВ программировании средствами командной оболочки ноль означает успех. Поскольку представленный вариант сценария не может обнаружить какие-либо ошибки, он всегда возвращает код успешного завершения. Мы вернемся к причинам использования нулевого кода завершения для обозначения успешного выполнения программы позже в этой главе, когда будем более подробно обсуждать команду
exitВ сценарии не используются никакие расширения и суффиксы имен файлов; ОС Linux и UNIX, как правило, редко применяют при именовании файлов расширения для указания типа файла. Вы могли бы использовать расширение sh или любое другое, командную оболочку это не волнует. У большинства предустановленных сценариев нет никакого расширения в именах файлов и лучший способ проверить, сценарий это или нет применить
командуfilefile firstfile /bin/bash