Командная оболочка предоставляет множество механизмов для создания индивидуальных условий работы. Оболочка — не только интерпретатор команд, но и мощный язык программирования.
Ниже даны отдельные способы использования развитых возможностей командной оболочки для облегчения работы в системе Linux.
Предполагается, что скрипты будут исполняться командной оболочкой bash (shell Борна).
Содержание
Скрипты командной оболочки
При необходимости выполнения некоторой последовательности команд можно сократить время их ввода, сгруппировав эти команды в одну. Например, для объединения файлов chapter1
и chapter2
в файл с именем book
, выдачи количества строк и печати этого файла используется последовательность из трёх команд:
$ cat chapter1 chapter2 > book
$ wc -l
$ lp book
Вместо того, чтобы вводить эти три команды с клавиатуры, их можно объединить в скрипт командной оболочки (shell script):
cat > makebook
#!/bin/sh
# Этот скрипт мы используем для создания и печати книги
cat chapter1 chapter2 > book;
wc -l book;
lp book
Скрипты командной оболочки — обычные текстовые файлы, создавать которые можно любыми текстовыми редакторами.
Первая строка рассматриваемого скрипта #!/bin/sh
идентифицирует этот файл как скрипт и сообщает командной оболочке, что файл следует передать на исполнение программе /bin/sh
, то есть самой программной оболочке.
Вторая строка является комментарием (comment), который начинается символом #
и продолжается до конца строки. Комментарии командная оболочка игнорирует.
Остальные строки скрипта являются обычными командами.
Делаем файл исполняемым, давая право на исполнение скрипта лишь владельцу:
$ chmod u+x makebook
Запускаем скрипт:
$ ./makebook
4 book
request id is Printer-182 (1 file(s))
После запуске скрипта makebook
содержимое файлов chapter1
и chapter2
было объединено в файле book
, на экране отображено количество строк (4
), содержимое файла book
выведено на печать.
Переменные оболочки и окружение
Командные оболочки позволяют создавать переменные (variables), являющиеся просто некоторыми данными, имеющими имя. Ссылаться на значение переменной можно, поставив перед именем переменной знак "$
".
Можно создать или установить переменную оболочки, набрав сразу за именем переменной знак "=
". Переменные чувствительны к регистру. По соглашению переменные, особенно экспортируемые переменные, пишутся в верхнем регистре, но это не обязательное требование.
История команд
Bash может хранить историю команд. По умолчанию история включена. С подробностями можно ознакомится в man-страницах bash.
Вот некоторые команды, которые можно использовать для работы с историей:
- history
- Отображает всю историю
- historyN
- Отображает последние N строк вашей истории
- !!
- Последняя введенная команда
- !N
- Nая команда истории
Пути
Переменная среды PATH
При использовании ряда команд без указания полного пути до исполняемых файлов shell самостоятельно находит соответствующий исполняемый файл, используя переменную среды PATH
.
Например, переменная PATH
может иметь значение:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin:/usr/lib/qt/bin:.
Это список каталогов (в которых shell будет искать команду), отделяемых друг от друга двоеточием ":
". При использовании команды ls
, например, shell прежде всего проверяет наличие /bin/ls
, затем /usr/bin/ls
и т.д.
Все это экономит вам массу времени, так как вместо того, чтобы писать полное имя команды (вроде /usr/bin/ls
), достаточно указать в PATH
перечень каталогов, которые shell будет просматривать автоматически.
Обратите внимание, что PATH
содержит ".
", что означает “текущий рабочий каталог”. Это позволяет создавать shell-сценарии или программы и выполнять их как команды из текущего каталога, без необходимости указывать это прямо (как в случае ./makebook
). Если каталог не указан в PATH
, то shell не будет его просматривать в поиске команд, это касается и текущего каталога.
Запуск других команд
Если программа не находится в переменной PATH
, то можно запустить ее, указав полный путь к программе и саму программу. Существует два вида путей:
- абсолютные пути, начинающиеся с
/
; - относительные пути эти пути относительно текущего рабочего каталога, имя которого можно получить с помощью команды
pwd
. Такие команды не начинаются с/
, но по крайней мере содержат один символ/
.
Можно использовать абсолютные пути в независимости от текущего рабочего каталога или относительные пути, когда команда находится недалеко от текущего каталога. Существует два специальных имени, которые можно использовать в указании пути; простая точка (.
) ссылается на текущий каталог, и пара точек (..
), которые ссылаются на родительский каталог текущего каталога. Можно использовать тильду (~
) для ссылки на свой домашний каталог. Например пользователь oleg
, находясь в своем домашнем каталоге, может использовать следующие пути к одному и тому же файлу:
$ /home/oleg/mokshadharma/cron.sh
$ mokshadharma/cron.sh
$ ~/mokshadharma/cron.sh
$ $HOME/mokshadharma/cron.sh