Пишем скрипты на bash
Декабрь 8th, 2008Командная строка Linux, это мощнейший инструмент, дающий возможность максимально эффективно использовать ресурсы вашего ПК. Однако, когда вам достаточно часто приходится решать задачи, используя “цепочки” команд, может возникнуть естественное желание, как-то этот процесс автоматизировать. В этой заметке я предлагаю познакомиться с одним, достаточно простым способом автоматизации - через создание скриптов. В месте с тем, у вас будет возможность, ознакомится с преимуществами работы в консольном режиме с командной строкой.
Самая популярная, на сегодняшний день, командная оболочка Linux, конечно bash. Не вдаваясь в детали и другие тонкости этой оболочки, я просто упомяну, что в большинстве дистрибутивов Linux она используется по умолчанию и в тот момент, когда вы входите в систему, bash оказывается уже загруженным и готовым к работе.
Когда вы запускаете терминал, командную строку или используете сочетание клавиш “Alt+F2” перед вами bash. В этой оболочке вы печатаете команды и ожидаете их выполнения. В этой же оболочке можно запускать и созданные вами скрипты. Чтобы операционная система понимала, каким интерпретатором должен обрабатываться файл, мы должны указать путь к исполняемому файлу этой программы, в нашем случае - bash. Чаще всего путь будет следующий - ‘/bin/bash‘ (узнать путь можно, с помощью команды ‘which‘ просто введите: ‘which bash‘). Формат записи строки следующий: “#!/bin/bash“, без пробелов и кавычек, без пропуска строк - именно в самой первой строке. А дальше просто, по очереди, пишите команды, которые необходимо выполнить. Чтобы не перегружать вас лишний раз информацией, я не буду останавливаться на таких вещах, как функции, конвейеры, переменные среды и т.д. Эти важные вещи вы узнаете позже, а сейчас мы просто напишем небольшой скрипт, который будет искать некоторую строку (слово, символ или число) в файлах определённой директории. Причем будет делать это рекурсивно, т.е. просматривая также и все вложенные папки, в независимости от уровня вложенности последних, т.е. пройдя по всему дереву файлов и каталогов, начиная с заданного уровня. Создавайте новый файл (можно на «Рабочем столе», если вы ещё не привыкли хранить свои скрипты в специальном месте), назовём его – «poisk». И пишем туда следующее:
MESTO_POISKA=’/home/barbar/Рабочий стол/html/wordpress/’
ISKOMOE=”rel=’external nofollow’”
SOHRANIT_ZDES=’/home/barbar/Рабочий стол/rezultat.txt‘
grep -r -i -H “$ISKOMOE” “$MESTO_POISKA” > “$SOHRANIT_ZDES”
Теперь давайте всё это разберем, для понимания, что к чему:
В первой строке «#!/bin/bash» мы указали путь к программе интерпретатору. Как раз то, о чем я писал выше.
Вторая строка – «MESTO_POISKA=’/home/barbar/Рабочий стол/html/wordpress/’». Здесь мы создаём переменную «MESTO_POISKA», где указываем место поиска – путь к директории, в которой будем искать.
Третья строка «ISKOMOE=”rel=’external nofollow’”», создаём переменную «ISKOMOE», со строкой, которую нужно найти – «rel=’external nofollow’». Однако обратите внимание: так как эта строка содержит символы «‘» - одинарной кавычки, то ограничителями строки, как в предыдущем случае, они уже быть не могут, их приходится заменять на двойную кавычку «“» (двойные кавычки отличаются от одинарных тем, что в обрамляемой ими строке, некоторые зарезервированные символы – «` ~ ! @ # $ % ^ & * ( ) _ — [ ] { } : ; ‘ ” / \ > <», могут иметь специальное значение).
Четвертая строка, содержит переменную «SOHRANIT_ZDES», где указываем место для сохранения результата, в нашем случае – файл ‘rezultat.txt‘ на Рабочем столе.
Ну и наконец пятая строка, это собственно и есть команда, куда подставляются значения переменных – «grep -r -i -H “$ISKOMOE” “$MESTO_POISKA” > “$SOHRANIT_ZDES”». Команда «grep» ищет соответствия заданного выражения в заданном месте и сохраняет в указном файле (ключи «-r» задаёт рекурсивное выполнение, ключ «-i» позволяет игнорировать различия в регистре символов, а ключ «H» указывает на то, что должен для каждого совпадения, должно быть указанно имя файла). Значок «>» это команда указывающая куда нужно осуществить вывод программы, мы указали файл «rezultat.txt» на «Рабочем столе», если его нет он будет создан, если существует перезаписан.
Созданный таким образом файл можно запускать как двойным щелчком, так и через консоль. Удачи!