SH

Утилита sh является стандартным командным интерпретатором в системе Linux. Текущая версия sh подвергается изменениям, чтобы соответствовать спецификации IEEE Std 1003.2 (POSIX.2) для командных оболочек [4].

Эта версия включает в себя много возможностей, делающих её схожей в некоторых отношениях с оболочкой Korn. Однако это не клон командной оболочки Korn, каковым является pdksh. В эту версию включены только возможности, определённые стандартом POSIX, плюс несколько расширений Berkeley.

Оболочка -это команда, которая читает строки из файла или с терминала, интерпретирует их и, в общем случае, выполняет другие команды. Это программа, которая запускается, когда пользователь входит в систему, хотя пользователь может выбрать другую оболочку с помощью команды chsh.

В оболочке реализован язык, имеющий конструкции для управления потоками, макросы, которые помимо функции накопления данных предоставляют множество других возможностей, имеется встроенная поддержка работы с историей команд и возможность редактирования командной строки. Она включает много возможностей, делающих удобной интерактивную работу, и в то же время обладает тем преимуществом, что её интерпретируемый язык - общий для интерактивного и неинтерактивного использования (командных сценариев).

Таким образом, команды можно вводить как непосредственно из запущенной командной оболочки, так и поместить их в файл, который может быть выполнен непосредственно оболочкой.

Фактически, из скриптов доступен полный набор команд, утилит и программ UNIX. Если этого недостаточно, то внутренние команды shell - условные операторы, операторы циклов и пр., увеличат мощь и гибкость сценариев. Shell-скрипты исключительно хороши при программировании задач администрирования системы и др., которые не требуют для своего создания полновесных языков программирования.

Язык сценариев легок в изучении, в нем не так много специфических операторов и конструкций. Синтаксис языка достаточно прост и прямолинеен, он очень напоминает команды, которые приходится вводить в командной строке. Короткие скрипты практически не нуждаются в отладке, и даже отладка больших скриптов отнимает весьма незначительное время.

Shell-скрипты очень хорошо подходят для быстрого создания прототипов сложных приложений, даже не смотря на ограниченный набор языковых конструкций и определенную "медлительность". Такая метода позволяет детально проработать структуру будущего приложения, обнаружить возможные "ловушки" и лишь затем приступить к кодированию на C, C++, Java, или Perl.

Скрипты возвращают нас к классической философии UNIX - "разделяй и влавствуй" т.е. разделение сложного проекта на ряд простых подзадач. Многие считают такой подход наилучшим или, по меньшей мере, наиболее эстетичным способом решения возникающих проблем, нежели использование нового поколения языков - "все-в-одном", таких как Perl.

Если не были указаны аргументы, и стандартный ввод подсоединён к терминалу (или если установлена опция -i), оболочка считается интерактивной. Интерактивная оболочка выводит строку-приглашение перед каждой командой и обрабатывает программные и командные ошибки по-другому (см. ниже). Сразу после запуска оболочка проверяет 0-й аргумент, и если он начинается с тире, оболочка также считается оболочкой входа в систему (login shell). Обычно это делается автоматически, когда пользователь входит в систему. Оболочка входа вначале читает команды из файла /etc/profile, а затем из файла .profile в домашнем каталоге пользователя, если они существуют. Если переменная окружения ENV установлена на момент запуска оболочки, либо установлена в файле .profile (если это оболочка входа), то оболочка затем читает команды из файла, указанного в ENV. Следовательно, пользователь должен помещать команды, которые должны выполняться только в момент входа в систему, в файл .profile, а команды, которые должны выполняться при каждом запуске оболочки, в файл ENV. Пользователь может установить значение переменной ENV в имя какого-нибудь файла, поместив следующую строку в файл .profile в своём домашнем каталоге, заменив .shinit на желаемое имя файла [3]:

ENV=$HOME/.shinit; export ENV

Первый указанный в командной строке аргумент, не являющейся опцией, будет воспринят как имя файла, из которого должны читаться команды (сценарий оболочки), а оставшиеся аргументы устанавливаются как позиционные параметры оболочки ($1, $2, и т.д.). В противном случае оболочка читает команды со своего стандартного ввода.

В отличие от более ранних версий sh, сценарий из ENV считывается только интерактивной оболочкой. Это закрывает широко известную и иногда легко эксплуатируемую брешь в системе безопасности, связанную с плохо продуманными сценариями ENV.


Hosted by uCoz