Легкий и очень полезный во время обучения или тестирования способ проверить работу небольших фрагментов кода— просто набрать с клавиатуры в командной строке сценарий командной оболочки.
Предположим, что у вас большое количество файлов на языке С, и вы хотите проверить наличие в них строки posix. Вместо того чтобы искать в файлах строку с помощью команды grep и затем выводить на экран отдельно каждый файл, можно выполнить всю операцию в интерактивном сценарии:
$ for file in *
> do
> if grep -l POSIX $file
> then
> more $file
> fi
> done posix
This is a file with POSIX in it - treat it well
$
Обратите внимание на то, как меняется знак $, стандартное приглашение командной оболочки, на символ >, когда оболочка ожидает очередной ввод. Вы можете продолжить набор, дав оболочке понять, когда закончите, и сценарий немедленно выполнится.
В этом примере команда grep выводит на экран найденные ею имена файлов, содержащих строку posix, а затем команда more отображает на экране содержимое файла. В конце на экран возвращается приглашение командной оболочки. Обратите внимание также на то, что вы ввели переменную командной оболочки, которая обрабатывает каждый файл для самодокументирования сценария. С таким же успехом можно использовать переменную i, но имя file более информативно с точки зрения пользователей.
|
|
Командная оболочка также обрабатывает групповые символы или метасимволы (часто называемые знаками подстановки). Например, символ * - знак подстановки, соответствующий строке символов, односимвольный знак подстановки? соответствует одиночному символу. Подстановочный шаблон из фигурных скобок {} позволяет формировать множество из произвольных строк, которое командная оболочка раскроет. Например, команда
$ ls my_{finger, toe}s
будет проверять файлы с именами my_figers и my_toes в текущем каталоге.
Каждый раз вводить последовательность команд утомительно. Можно сохранить команды в файле, который принято называть сценарием или скриптом командной оболочки, а затем выполнять эти файлы.
Создание сценария
Создать файл, содержащий команды, можно помощью любого текстового редактора. В данной работе рекомендуется использовать встроенный в mc редактор. Для создания нового файла в mc используйте комбинацию клавиш Shift+F4. Создайте файл с именем first с таким содержимым:
#!/bin/sh
# first
# Этот файл просматривает все файлы в текущем каталоге для поиска строки
# POSIX, а затем выводит имена найденных файлов в стандартный вывод.
for file in *
do
if grep -q POSIX $file
then
echo $file
fi
done
exit 0
Комментарий начинается со знака # и продолжается до конца строки. Принято знак # ставить в первой символьной позиции строки. Первая строка #! /bin/sh — это особая форма комментария; символы #! сообщают системе о том, что следующий за ними аргумент — программа, применяемая для выполнения данного файла. В данном случае программа /bin/sh — командная оболочка, применяемая по умолчанию.
|
|
Команда exit гарантирует, что сценарий вернет осмысленный код завершения. Он редко проверяется при интерактивном выполнении программ, но если вы хотите запускать данный сценарий из другого сценария и проверять, успешно ли он завершился, возврат соответствующего кода завершения очень важен. Даже если вы не намерены разрешать вашему сценарию запускаться из другого сценария, все равно следует завершать его с подходящим кодом.
В программировании средствами командной оболочки ноль означает успех. Поскольку представленный вариант сценария не может обнаружить какие-либо ошибки, он всегда возвращает код успешного завершения.
В сценарии не используются никакие расширения и суффиксы имен файлов; ОС Linux и UNIX, как правило, редко применяют при именовании файлов расширения для указания типа файла.