Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 семестр / ПОС / 3. Командная строка UNIX.doc
Скачиваний:
71
Добавлен:
28.03.2015
Размер:
228.35 Кб
Скачать

Формат командной строки Приглашение

Командная строка состоит из приглашенияи вводимой команды. Приглашение – это специальная последовательность символов, которая располагается в начале строки и задает начало области ввода команды. Рассмотрим пример выполнения команды:

Пример 3.1. Пример выполнения команды

user@desktop ~ $ date

Втр Окт 4 23:15:37 MSD 2005

user@desktop ~ $

Здесь приглашением является строка user@desktop ~ $, которая помимо символа начала ввода ($) содержит информацию об имени пользователя, имени компьютера и текущей директории.

Формат команды

Каждая команда UNIX состоит из следующих частей:

Имя команды

Идентификатор команды, совпадающий с именем программы, которая запускается для исполнения команды. Некоторые команды (такие как echo) являютсявстроеннымидля данной командной оболочки, и для их выполнения вызывается не программа, а внутренняя функция оболочки;

Параметрыили ключи или флаги или опции

Команда может иметь один или несколько параметров, разделённых пробелом. Параметры могут состоять из одной буквы (-l ) или полнословными (например,--help). Однобуквенные параметры могут группироваться, например запуск командыls -alэквивалентен запускуls -a -l. Некоторые параметры состоят из имени и аргумента, например в командеgrep -f access.log -n testимя файлаaccess.log– часть параметра-f.

Аргументы

Некоторые команды могут иметь аргументы. Аргументом может являться текстовая строка, соответствующая имени файла или другого объекта. Аргументы также разделяются символом пробела, чтобы передать в качестве аргумента строку символов с пробелами, можно воспользоваться символами кавычек:

user@desktop ~ $ echo "Hello, world."

Hello, world.

Перенаправления

Стандартный ввод и вывод каждой команды может быть перенаправлен в файл. По умолчанию ввод и вывод команды связываются с пользовательским терминалом. Для указания источника ввода или назначения вывода (для обычной информации и для ошибок отдельно) используются специальные символы (<, > и >>).

Как правило, порядок данных частей команды должен быть именно таким, однако некоторые из них (кроме имени команды) могут отсутствовать.

Процесс выполнения команды

Командная оболочка – это обычный процесс в операционной системе UNIX. Когда пользователь вводит команду (например, по нажатию Enter), командная оболочка выполняет следующие действия:

  1. анализ команды: выделение имени, параметров и аргументов;

  2. если это встроенная команда, для неё вызывается функция-обработчик;

  3. если это внешняя команда:

    1. производится поиск программы с соответствующим именем;

    2. создаётся дочерний процесс оболочки (системный вызов fork);

    3. в дочернем процессе запускается необходимая команда с расшифрованными параметрами и аргументами (системный вызов exec);

    4. оболочка контролирует выполнение дочернего процесса, передаёт ему сигналы и ввод пользователя, ожидает его завершения (системный вызов wait);

  4. результаты работы возвращаются пользователю, отображается приглашение – он может вводить следую команду.

Рисунок 2.3. Запуск команды оболочкой

Возвращаемое значение

Каждый процесс при завершении возвращает своему родительскому процессу специальный код завершенияпрограммы. Этот код может использоваться для получения результата выполнения программы и для проверки корректности её выполнения (возврата кода ошибки).

Традиционно для UNIX, в случае успешного выполнения программа (а также большинство системных функций) возвращает значение 0. Другие значения (все, отличные от0) означают тот или иной вид ошибки. Так как программы часто выводят инфоромацию об ошибках через специальныйпоток вывода ошибок(stderr), возвращаемые значения чаще всего могут принимать только два значения: «ноль» и «не ноль».

Если рассмотреть простейший пример программы на языке C:

Пример 3.2. Возвращаемое значение в программе на языке C

int main(int argc, char* argv[]) {

...

if(error) {

exit(1);

}

...

return 0;

}

видно, что программы передают код завершения через возвращаемое значение главной функции (main) или как параметр функцииexit.

В командной строке результат выполнения программы можно проанализировать с помощью специальной переменной ($?):

user@desktop ~ $ test -f /tmp/file.txt

user@desktop ~ $ echo $?

0