45948 (Программирование на Shell)

2016-07-31СтудИзба

Описание файла

Документ из архива "Программирование на Shell", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45948"

Текст из документа "45948"

Программирование на языке Shell в системе UNIX. Примеры программирования

1. ВВЕДЕНИЕ

Среди операционных систем особое место занимает Unix. Беспрецедентным является

то, что ОС Unix может работать практически на всех выпускаемых платформах. UNIX

- это стандарт де факто открытых и мобильных операционных систем. (поскольку

название UNIX запатентовано компанией AT&T - различные юниксы называются

различно: SCO UNIX, BSDI, Solaris, Linux, DG/UX, AIX и т.д.).

Это не только многозадачная, но и многопользовательская система. Она

обеспечивает современный пользовательский интерфейс на базе системы X Window и

межмашинную связь на базе протоколов TCP/IP и т.п.

ОС Unix была создана Кеном Томпсоном и Деннисом Ритчи в Bell Laborotories

(AT&T). Широко распространяться Unix/v7 (версия 7) начала в 79 - 80-м годах.

Вручение создателям Unix в 1983 году Международной премии А.Тьюринга в области

программирования ознаменовало признание этой системы мировой научной (computer

science) общественностью. Что также беспрецедентно.

ОС Unix стоит на трех китах: язык Си, файловая система, командный язык. В

дальнейшем к ним добавились система X Window и протоколы TCP/IP.

2. ПРОСТЕЙШИЕ СРЕДСТВА SHELL

Командный язык shell (в переводе - раковина, скорлупа) фактически есть язык

программирования очень высокого уровня. На этом языке пользователь осуществляет

управление компьютером. Обычно, после входа в систему вы начинаете

взаимодействовать с командной оболочкой. Признаком того, что оболочка (shell)

готова к приему команд служит выдаваемый ею на экран промптер. В простейшем

случае это один доллар ("$").

Shell не является необходимым и единственным командным языком (хотя именно он

стандартизован в рамках POSIX [POSIX 1003.2] - стандарта мобильных систем).

Например, немалой популярностью пользуется язык cshell, есть также kshell,

bashell и другие. Более того, каждый пользователь может создать свой командный

язык. Может одновременно на одном экземпляре операционной системы работать с

разными командными языками.

shell - это одна из многих команд UNIX. То есть в набор команд оболочки "shell"

входит команда "sh" - вызов интерпретатора "shell". Первый "shell" вызывается

автоматически при вашем входе в систему и выдает на экран промтер. После этого

вы можете вызывать на выполнение любые команды, в том числе и снова сам "shell",

который вам создаст новую оболочку внутри прежней.

Так например, если вы подготовите в редакторе файл "file_1":

echo Hello!

то это будет обычный текстовый файл, содержащий команду "echo", которая при

выполнении выдает все написанное правее ее на экран. Можно сделать файл "file_1"

выполняемым с помощью команды "chmod 755 file_1". Но его можно выполнить, вызвав

явно команду "sh" ("shell"):

sh file_1

или

sh < file1

Файл можно выполнить и в текущем экземпляре "shell". Для этого существует

специфическая команда "." (точка), т.е.

. file_1

Поскольку UNIX - система многопользовательская, вы можете даже на персональном

компьютере работать параллельно, скажем, на 12-ти экранах (переход с экрана на

экран ALT/функциональная клавиша), имея на каждом экране нового (или одного и

того же) пользователя со своей командной оболочкой. Можете и в графическом

режиме X-Window также открыть большое число окон, а в каждом окне может быть

свой пользователь со своей командной оболочкой...

Стержневым элементом языка shell является команда.

2.1. Структура команд

Команды в shell обычно имеют следующий формат:

Например:

ls -ls /usr/bin

Где ls - имя команды выдачи содержимого директория,

-ls - флаги ( "-" - признак флагов, l - длинный формат, s - об'ем файлов в

блоках),

/usr/bin - директорий, для которого выполняется команда.

Эта команда выдаст на экран в длинном формате содержимое директория /usr/bin,

при этом добавит информацию о размере каждого файла в блоках.

К сожалению, такая структура команды выдерживается далеко не всегда. Не всегда

перед флагами ставится минус, не всегда флаги идут одним словом. Есть

разнообразие и в представлении аргументов. К числу команд, имеющих экзотические

форматы, относятся и такие "ходовые" команды, как сс – вызов компилятора языка

С, tar – работа с архивами, dd – копирование файла с преобразованием, find –

поиск файлов и ряд других.

Как правило, первое слово shell воспринимает, как команду. Поэтому в командной

строке

cat cat

первое слово будет расшифровано shell, как команда (конкатенации), которая

выдаст на экран файл с именем "cat" (второе слово), находящийся в текущем

директории.

2.2. Группировка команд.

Средства группировки:

; и - определяют последовательное выполнение команд;

& - асинхронное (фоновое) выполнение предшествующей команды;

&& - выполнение последующей команды при условии нормального завершения

предыдущей, иначе игнорировать;

- выполнение последующей команды при ненормальном завершении предыдущей, иначе

игнорировать.

При выполнении команды в асинхронном режиме (после команды стоит один амперсанд)

на экран выводится номер процесса, соответствующий выполняемой команде, и

система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем.

Например, наберем команду "find" в фоновом режиме для поиска в системе , начиная

от корня "/", файла с именем "conf", а затем "pwd" в обычном режиме. На экране

этот фрагмент будет выглядеть следующим образом (курсивом выделены комментарии):

$ find/-name conf -print & ввод команды "find"

288 номер (PID) фонового процесса

$ pwd ввод команды "pwd"

/mnt/lab/asu результат работы "pwd"

$ возвращение shell в промптер

/usr/include/sys/conf результат работы "find"

Иногда необходимо, чтобы все фоновые процессы завершились, прежде чем будет

выполняться какой-то расчет. Для этого служит специальная команда "wait [PID]".

Эта команда ждет завершения указанного идентификатором (числом) фонового

процесса. Если команда без параметра, то она ждет завершения всех фоновых

процессов, дочерних для данного "sh".

Для группировки команд также могут использоваться фигурные "{}" и круглые "()"

скобки. Рассмотрим примеры, сочетающие различные способы группировки: Если

введена командная строка

command1 && command2; command3

где command1, command2 и command3 - какие-то команды, то "command2" будет

выполнена только при успешном завершении "command1"; после любого из исходов

обработки "command2" (т.е. "command2" будет выполнена, либо пропущена) будет

выполнена "command3".

command1 && { command2; command3}

Здесь обе команды ("command2" и "command3") будут выполнены только при успешном

завершении "command1".

{command1; command2} &

В фоновом режиме будет выполняться последовательность команд "command1" и

"command2".

Фоновые процессы сложно уничтожить, поскольку традиционная команда "CTL/C"

прерывает только процессы переднего плана. Для уничтожения фонового процесса

надо знать его номер. При запуске фонового процесса на экран выдается число,

соответствующее номеру (идентификатору) этого процесса (PID). Если этот номер

забыт или надо убедиться, что этот процесс не закончен, с помощью команды

ps -aux

можно получить перечень идентификаторов процессов (PID), имена пользователей,

текущее время, затраченное процессами, и т.д.

В выведенной таблице можно найти номера процессов, подлежащих уничтожению,

например это "849" и "866". Тогда командой

kill -9 866 849

можно уничтожить эти процессы. При уничтожении процессов надо вы должны иметь то

же имя пользователя, какое было приписано уничтожаемым процессам или root.

Круглые скобки "()", кроме выполнения функции группировки, выполняют и функцию

вызова нового экземпляра интерпретатора shell.

Пусть мы находились в начальном каталоге "/mnt/lab/asu"

Тогда в последовательности команд

cd ..; ls; ls

две команды "ls" выдадут 2 экземпляра содержимого каталога "/mnt/lab", а

последовательность

(cd ..; ls) ls

выдаст сначала содержимое каталога "/mnt/lab", а затем содержимое

"/mnt/lab/asu", т.к. при входе в скобки вызывается новый экземпляр shell, в

рамках которого и осуществляется переход. При выходе из круглых скобок

происходит возврат в старый shell и в старый каталог.

2.3. Перенаправление команд

Стандартный ввод (вход) - "stdin" в ОС UNIX осуществляется с клавиатуры

терминала, а стандартный вывод (выход) - "stdout" направлен на экран терминала.

Существует еще и стандартный файл диагностических сообщений - "stderr", о

котором речь будет чуть позже.

Команда, которая может работать со стандартным входом и выходом, называется

ФИЛЬТРОМ.

Пользователь имеет удобные средства перенаправления ввода и вывода на другие

файлы (устройства). Символы ">" и ">>" обозначают перенаправление вывода.

ls >file_1

команда "ls" сформирует список файлов текущего каталога и поместит его в файл

"file_1" (вместо выдачи на экран). Если файл "file_1" до этого существовал, то

он будет затерт новым.

pwd >>file_1

команда pwd сформирует полное имя текущего каталога и поместит его в конец файла

"file_1", т.е. ">>" добавляет в файл, если он непустой.

Символы "<" и "<<" обозначают перенаправление ввода.

wc -l

подсчитает и выдаст на экран число строк в файле file_1.

ed file_2 <

создаст с использованием редактора файл "file_2", непосредственно с терминала.

Окончание ввода определяется по символу, стоящему правее "<<" (т. е. "!"). То

есть ввод будет закончен, когда первым в очередной строке будет "!".

Можно сочетать перенаправления. Так

wc -l file_4

и

wc -l >file_4

выполняются одинаково: подсчитывается число строк файла "file_3" и результат

помещается в файл "file_4".

Средство, объединяющее стандартный выход одной команды со стандартным входом

другой, называется КОНВЕЙЕРОМ и обозначается вертикальной чертой "".

ls wc -l

список файлов текущего каталога будет направлен на вход команды "wc", которая на

экран выведет число строк каталога.

Конвейером можно объединять и более двух команд, когда все они, возможно кроме

первой и последней - фильтры:

cat file_1 grep -h result sort cat -b > file_2

Данный конвейер из файла "file_1" ("cat") выберет все строки, содержащие слово

"result" ("grep"), отсортирует ("sort") полученные строки, а затем пронумерует

("cat -b") и выведет результат в файл "file_2".

Поскольку устройства в ОС UNIX представлены специальными файлами, их можно

использовать при перенаправлениях. Специальные файлы находятся в каталоге

"/dev". Например, "lp" - печать; "console" - консоль; "ttyi" - i-ый терминал;

"null"- фиктивный (пустой) файл (устройство).

Тогда, например,

ls > /dev/lp

выведет содержимое текущего каталога на печать, а

file_1 < /dev/null

обнулит файл "file_1".

sort file_1 tee /dev/lp tail -20

В этом случае будет отсортирован файл "file_1" и передан на печать, а 20

последних строк также будут выданы на экран.

Вернемся к перенаправлению выхода. Стандартные файлы имеют номера:

0 - stdin,

1 - stdout

2 - stderr.

Если вам не желательно иметь на экране сообщение об ошибке, вы можете

перенаправить его с экрана в указанный вами файл (или вообще "выбросить",

перенаправив в файл "пустого устройства" - /dev/null). Например при выполнении

команды

cat file_1 file_2

которая должна выдать на экран последовательно содержимое файлов "file_1" и

"file_2", выдаст вам, например, следующее

111111 222222

cat: f2: No such file or directory

где 111111 222222 - содержимое файла "file_1", а файл "file_2" отсутствует, о

чем команда "cat" выдала сообщение в стандартный файл диагностики, по умолчанию,

как и стандартный выход, представленный экраном.

Если вам не желательно такое сообщение на экране, его можно перенаправить в

указанный вами файл:

cat file_1 file_2 2>f-err

сообщения об ошибках будут направляться (об этом говорит перенаправление "2>") в

файл "f-err". Кстати, вы можете всю информацию направлять в один файл "ff",

использовав в данном случае конструкцию

cat file_1 file_2 >>ff 2>ff

Можно указать не только какой из стандартных файлов перенаправлять, но и в какой

стандартный файл осуществить перенаправление.

cat file_1 file_2 2>>ff 1>&2

Здесь сначала "stderr" перенаправляется (в режиме добавления) в файл "ff", а

затем стандартный выход перенаправляется на "stderr", которым к этому моменту

является файл "ff". То есть результат будет аналогичен предыдущему.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее