Настройка и работа в Linux

         

Программы-оболочки


В той статье мы поговорим о неотъемлемой части пользовательского интерфейса Linux – о программах-оболочках. Именно программа-оболочка запускается после регистрации пользователя в системе. Программы-оболочки часто называют командными интерпретаторами, потому что они обрабатывают (интерпретируют) команды, введенные пользователем. Во времена DOS этим занимался файл C:\command.com.
В файле /etc/passwd для каждого пользователя указывается, какую оболочку он будет использовать. root:x:0:0:root:/root:/bin/bash den:x:501:501:Denis:/home/den:/bin/bash

Из листинга видно, что оба пользователя используют оболочку /bin/bash. Оболочка, как правило, указывается в последнем поле файла passwd.
Список всех установленных в системе программ-оболочек содержится в файле /etc/shells. У меня он выглядит так:

Листинг 1. /bin/sh /bin/bash /bin/ash /bin/bsh /bin/tcsh /bin/csh /bin/zsh

На любой Unix-системе, даже на самой старой, вы можете увидеть, по крайней мере, два интерпретатора из этого списка: sh, csh. Названия, как вы догадались, исходят от слова shell – оболочка. Csh – это оболочка, использующая командный язык, напоминающий язык программирования C. В ОС Linux по умолчанию используется оболочка bash (Bourne Again Shell). Bash является более «продвинутой» версией обыкновенной оболочки sh.
Все оболочки выполняют одну и туже функцию – интерпретируют команды пользователя. Например, когда вы вводите команду

$ program -s /etc/passwd

Интерпретатор запустит программу program и передаст ей два (точнее три)параметра: первый – это -s, второй – это /etc/passwd. А что делать с этими параметрами разберется сама программа. Я что-то говорит о третьем параметре? Существует еще один так называемый нулевой параметр. Этот параметр содержит полное имя файла программы. Например, если наша программа находится в каталоге /bin, то нулевой параметр будет содержать значение /bin/program.
Обратите внимание на знак доллара возле команды. Это признак того, что сейчас мы работаем как обыкновенный пользователь. Если мы зарегистрируемся как пользователь root (суперпользователь), то знак доллара измениться на решетку – #.
Отличием каждой программы-оболочки является ее командный язык. Вот поэтому одни пользователи предпочитают использовать bash, а другие – tcsh. Командные языки некоторых оболочек очень похожи, например, sh и bash, csh и tsch.
Командный язык используется для создания сценариев. Сценарий – это последовательность команд, которую должен выполнить интерпретатор команд. Пример простейшего сценария (командный язык bash):

Листинг 2. #!/bin/bash echo -n "Enter your name" read name echo "Hello, $name"


Для определенности скажем, что мы сохранили этот сценарий под именем script1. Чтобы мы могли выполнить этот сценарий нужно сделать этот файл исполнимым (например, с помощью команды chmod 550 ./script1) и ввести команду (я предполагаю, что вы создали этот файл в текущем каталоге):
./script1

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

/bin/bash ./script1

При этом не имеет значения, какой интерпретатор сейчас активен: будет запущена программа, указанная в первой строке сценария. Вы можете указать также и опции программы-оболочки:

#!/usr/bin/myshell -option

При запуске сценария, в первой строке которого стоит такая команда, интерпретатор выполнит команду:
/usr/bin/myshwll -option <имя_файла_сценария>

Обратите внимание на первую строку сценария script1
#!/bin/bash
Это указание программы для обработки этого сценария. Если же вы напишете
# !/bin/bash
то это будет уже обыкновенным комментарием и система не сможет выполнить ваш сценарий, поскольку не будет знать, какую программу-оболочку нужно использовать. В лучшем случае, если сейчас активным является интерпретатор, на языке которого написан сценарий, файл все-таки будет выполнен, а в другом случае вы получите сообщение об ошибке. Например, если вы написали сценарий на bash, не указав (или неправильно указав) интерпретатор, и пытаетесь выполнить его при запущенном интерпретаторе csh, то получите сообщение о синтаксической ошибке.


Содержание раздела