Начальные навыки работы в командном интерпретаторе shell
Программирование на языке командного интерпретатора - shell. Ознакомление со структурой изучаемого файла и возможностями его перенаправления на другие устройства. Правила группировки команд в редакторе shell, с помощью операционной системы Knoppi.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 27.11.2013 |
Размер файла | 5,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ЛЕКЦИЯ №4
Начальные навыки работы в командном интерпретаторе shell
Содержание занятия
1. Теоретическая часть
1.1 Общие сведения о командном интерпретаторе shell
1.2 Структура команд в shell
1.3 Группировка команд в shell
1.4 Перенаправление команд в shell
1.5 Командные файлы в shell
2. Практическая часть
2.1 Задание на лабораторную работу
2.2 Методические указания к выполнению лабораторной работы
2.3 Контрольные вопросы
1. Теоретическая часть
Начальные навыки работы в командном интерпретаторе shell.
Цель работы: получение начальных навыков программирования в командном интерфейсе shell.
1.1 Общие сведения о командном интерпретаторе shell
Командный язык shell (в переводе - раковина, скорлупа) фактически есть язык программирования очень высокого уровня. На этом языке пользователь осуществляет управление компьютером. Обычно, после входа в систему вы начинаете взаимодействовать с командной оболочкой (если угодно - она начинает взаимодействовать с вами). Признаком того, что оболочка (shell) готова к приему команд служит выдаваемый ею на экран промптер. В простейшем случае это один доллар ("$").
Shell не является необходимым и единственным командным языком (хотя именно он стандартизован в рамках POSIX [POSIX 1003.2] - стандарта мобильных систем). Например, немалой популярностью пользуется язык cshell, есть также kshell, bashell (из наиболее популярных в последнее время) и другие. Более того, каждый пользователь может создать свой командный язык. Может одновременно на одном экземпляре операционной системы работать с разными командными языками.
ОБРАТИТЕ ВНИМАНИЕ. shell - это одна из многих команд UNIX. То есть в набор команд оболочки (интерпретатора) "shell" входит команда "sh" - вызов интерпретатора "shell". Первый "shell" вызывается автоматически при вашем входе в систему и выдает на экран промтер. После этого вы можете вызывать на выполнение любые команды, в том числе и снова сам "shell", который вам создаст новую оболочку внутри прежней.
Так например, если вы подготовите в редакторе файл "f1": "echo Hello!", то это будет обычный текстовый файл, содержащий команду "echo", которая при выполнении выдает все написанное правее ее на экран. Можно сделать файл "f1" выполняемым с помощью команды "chmod 755 f1". Но его можно ВЫПОЛНИТЬ, вызвав явно команду (!) "sh" ("shell"), "shf1" или "sh<f1".
Файл можно выполнить и в текущем экземпляре "shell". Для этого существует специфическая команда "." (точка), т. е., ".f1".
ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ. Не начинайте командные файлы с символа "#", хотя естественно начинать его с комментария.
Дело в том, что такой командный файл в оболочке C-Shell ("csh") будет интерпретирован как выполняемый в "csh", в результате будет активизирован интерпретатор "csh".
СОВЕТ. Начинайте командный sh-файл с пустой строки или пустого оператора ":".
Поскольку UNIX - система многопользовательская, вы можете даже на персональном компьютере работать параллельно, скажем, на 12-ти экранах (переход с экрана на экран ALT/функциональная клавиша), имея на каждом экране нового (или одного и того же) пользователя со своей командной оболочкой.
Можете и в графическом режиме X-Window также открыть большое число окон, а в каждом окне может быть свой пользователь со своей командной оболочкой. Стержневым элементом языка shell является команда.
1.2 Структура команд в shell
Команды в shell обычно имеют следующий формат:
Где:
ls - имя команды выдачи содержимого директория;
-ls - флаги ("-" - признак флагов, l - длинный формат, s - об'ем файлов в блоках);
/usr/bin - директорий, для которого выполняется команда.
Эта команда выдаст на экран в длинном формате содержимое директория /usr/bin, при этом добавит информацию о размере каждого файла в блоках.
К сожалению, такая структура команды выдерживается далеко не всегда. Не всегда перед флагами ставится минус, не всегда флаги идут одним словом. Есть разнообразие и в представлении аргументов. К числу команд, имеющих экзотические форматы, относятся и такие "ходовые" команды, как сс, tar, dd, find и ряд других.
Как правило (но не всегда), первое слово (т. е., последовательность символов до пробела, табуляции или конца строки) shell воспринимает, как команду. Поэтому в командной строке "cat cat", первое слово будет расшифровано shell, как команда (конкатенации), которая выдаст на экран файл с именем "cat" (второе слово), находящийся в текущем директории.
1.3 Группировка команд в shell
Средства группировки:
";и" - определяют последовательное выполнение команд;
& - асинхронное (фоновое) выполнение предшествующей команды;
&& - выполнение последующей команды при условии нормального завершения предыдущей, иначе игнорировать;
"||" - выполнение последующей команды при ненормальном завершении предыдущей, иначе игнорировать.
При выполнении команды в асинхронном режиме (после команды стоит один амперсанд) на экран выводится номер процесса, соответствующий выполняемой команде, и система, запустив этот фоновый процесс, вновь выходит на диалог с пользователем.
Иногда необходимо, чтобы все фоновые процессы завершились, прежде чем будет выполняться какой-то расчет. Для этого служит специальная команда "wait [PID]". Эта команда ждет завершения указанного идентификатором (числом) фонового процесса. Если команда без параметра, то она ждет завершения всех фоновых процессов, дочерних для данного "sh".
Для группировки команд также могут использоваться фигурные "{}" и круглые "()" скобки. Рассмотрим примеры, сочетающие различные способы группировки: Если введена командная строка:
Где:
k1, k2 и k3 - какие-то команды, то "k2" будет выполнена только при успешном завершении "k1";после любого из исходов обработки "k2" (т. е., "k2" будет выполнена, либо пропущена) будет выполнена "k3":
Здесь обе команды ("k2" и "k3") будут выполнены только при успешном завершении "k1":
В фоновом режиме будет выполняться последовательность команд "k1" и "k2".
Круглые скобки "()", кроме выполнения функции группировки, выполняют и функцию вызова нового экземпляра интерпретатора shell.
Пусть мы находились в начальном каталоге "/mnt/lab/asu". Тогда в последовательности команд "cd..;ls;ls", две команды "ls" выдадут 2 экземпляра содержимого каталога "/mnt/lab", а последовательность "(cd..;ls);ls", выдаст сначала содержимое каталога "/mnt/lab", а затем содержимое "/mnt/lab/asu", т. к., при входе в скобки вызывается новый экземпляр shell, в рамках которого и осуществляется переход.
При выходе из круглых скобок происходит возврат в старый shell и в старый каталог.
1.4 Перенаправление команд в shell
Стандартный ввод (вход) - "stdin" в ОС UNIX осуществляется с клавиатуры терминала, а стандартный вывод (выход) - "stdout" направлен на экран терминала. Существует еще и стандартный файл диагностических сообщений - "stderr", о котором речь будет чуть позже. Команда, которая может работать со стандартным входом и выходом, называется ФИЛЬТРОМ. Пользователь имеет удобные средства перенаправления ввода и вывода на другие файлы (устройства). Символы ">" и ">>" обозначают перенаправление вывода "ls>f1", команда "ls" сформирует список файлов текущего каталога и поместит его в файл "f1" (вместо выдачи на экран). Если файл "f1" до этого существовал, то он будет затерт новым: "pwd>>f1", команда pwd сформирует полное имя текущего каталога и поместит его в конец файла "f1", т. е., ">>" добавляет в файл, если он непустой. Символы "<" и "<<" обозначают перенаправление ввода "l<f1", подсчитает и выдаст на экран число строк в файле f1 выдает "edf2<<!", и создаст с использованием редактора файл "f2", непосредственно с терминала. Окончание ввода определяется по символу, стоящему правее "<<" (т. е. "!"). То есть ввод будет закончен, когда первым в очередной строке будет "!". Перенаправления как:
- выполняются одинаково: подсчитывается число строк файла "f3" и результат помещается в файл "f4".
Средство, объединяющее стандартный выход одной команды со стандартным входом другой, называется КОНВЕЙЕРОМ и обозначается вертикальной чертой "|".
Тогда "wc-l" - список файлов текущего каталога будет направлен на вход команды "wc", которая на экран выведет число строк каталога.
Конвейером можно объединять и более двух команд, когда все они, возможно кроме первой и последней - фильтры:
Данный конвейер из файла "f1" ("cat") выберет все строки, содержащие слово "result" ("grep"), отсортирует ("sort") полученные строки, а затем пронумерует ("cat -b") и выведет результат в файл "f2".
Поскольку устройства в ОС UNIX представлены специальными файлами, их можно использовать при перенаправлениях. Специальные файлы находятся в каталоге "/dev". Например:
- "lp" - печать;
- "console" - консоль;
- "ttyi" - i-ый терминал;
- "null" - фиктивный (пустой) файл (устройство).
Тогда, выведет содержимое текущего каталога на печать, а "/dev/null" обнулит файл "f1":
В этом случае будет отсортирован файл "f1" и передан на печать, а 20 последних строк также будут выданы на экран.
При генерации имен используют метасимволы:
* - произвольная (возможно пустая) последовательность символов;
? - один произвольный символ;
[...] - любой из символов, указанных в скобках перечислением и/или с указанием диапазона;
catf* - выдаст все файлы каталога, начинающиеся с "f";
cat*f* - выдаст все файлы, содержащие "f";
cat - выдаст файлы данного каталога с однобуквенными расширениями, скажем "program.?", но не выдаст "program.com".
Аналогичный эффект дадут и команды "cat [abcd]*" и "cat [bdac]*".
1.5 Командные файлы в shell
Для того, чтобы текстовый файл можно было использовать как команду, существует несколько возможностей.
Пусть с помощью редактора создан файл с именем "cmd", содержащий одну строку следующего вида: "date;pwd;ls".
Можно вызвать shell как команду (!), обозначаемую "sh", и передать ей файл "cmd", как аргумент или как перенаправленный вход, т. е., "$shcmd" или же "$sh<cmd".
В результате выполнения любой из этих команд будет выдана дата, затем имя текущего каталога, а потом содержимое каталога.
Более интересный и удобный вариант работы с командным файлом - это превратить его в выполняемый, т. е., просто сделать его командой, что достигается изменением кода защиты.
Для этого надо разрешить выполнение этого файла.
Например "chmod711cmd" сделает код защиты "rwx__x__x". Тогда простой вызов "cmd" приведет к выполнению тех же трех команд.
Результат будет тот же, если файл с содержимым "date;pwd;ls" представленном в виде: "date, pwd, ls", так как переход на другую строку также является разделителем в последовательности команд.
Таким образом, выполняемыми файлами могут быть не только файлы, полученные в результате компиляции и сборки, но и файлы, написанные на языке shell. Их выполнение происходит в режиме интерпретации с помощью shell-интерпретатора.
Еще раз отметим, что shell-интерпретатор, это всего лишь одна из сотен команд ОС UNIX, имеющая равные с прочими привилегии.
2. Практическая часть
Знакомство с простейшими командами shell (cat, rm, mkdir, rmdir, cp, ls, pwd, cd, mc, chmod, date, wc), группировкой команд, перенаправлением команд.
2.1 Задание на лабораторную работу
Открыть редактор shell в текущей директории (ramdisk/home/knoppix) создать директорию Dir.
В этой папке:
- создать файл myfile;
- записать в нём команды date, ls, pwd;
- скопировать исходный файл с именем myfile1 в текущую директорию;
- открыть Midnight Commander;
- убедиться в существовании созданной директории, файла и его копии;
- просмотреть содержимое файла myfile;
- зайти в корневой каталог, ознакомиться с его содержимым;
- выйти из Midnight Commander (команда exit);
- сделать файл myfile исполняемым;
- запустить файл myfile на исполнение, убедиться, что файл стал исполняемым и команды, записанные в файле, выполнены;
- вывести на экран содержимое текущей директории;
- вывести на экран содержимое текущей директории и поместить эту информацию в файл f1, используя перенаправление вывода;
- вывести на экран полный путь текущей директории;
- вывести на экран полный путь текущей директории и добавить эту информацию в файл f1, используя перенаправление вывода;
- просмотреть содержимое файла f1, убедиться, что информация, записанная в нём, совпадает с информацией на экране;
- подсчитать число строк в файле f1, используя перенаправление ввода;
- вывести на экран содержимое текущей директории и подсчитать число строк в выведенном списке, группируя команды, используя конвейер;
- перейти в корневой каталог и вывести на экран его содержимое, группируя команды;
- удалить файлы myfile, myfile1, f1;
- удалить директорию Dir.
2.2 Методические указания к выполнению лабораторной работы
1). Существует много способ вызова редактора shell в операционной системе Knoppix, один из способов - это щелкнуть на панели задач на иконке консоли:
Второй из способов - зайти в основное меню (первая иконка на панели задач). В меню "Run Command" ввести команду sh и вызвать командный редактор shell:
2). Открыв редактор shell, мы окажемся в директории ramsisk/home/knoppix, в этом можно убедиться, выведя полный путь текущей директории на экран командой pwd:
3). Чтобы создать директорию, необходимо использовать команду mkdir, чтобы создать файл, используется редактор vi и команда vi "имя файла", о чём говорилось в первой лабораторной работе, либо команда cat > "имя файла", после чего с клавиатуры вводится содержимое файла. После ввода в файл необходимой информации, для возвращения в командный редактор необходимо нажать "<Ctrl>+<D>".
Например, создадим директорию "New", затем осуществляем переход в эту директорию с помощью команды "cd(сdNew)".
Далее создадим файл "new" и в него введём последовательность команд "date;pwd;ls". После чего мы, используя ту же команду cat, просматриваем содержимое файла:
4). Для создания копии файла используется команда cp "старое имя" "новое имя".
Например, чтобы создать копию файла new с именем new1, необходимо ввести команду "cpnewnew1".
5). Чтобы открыть Midnight Commander, необходимо ввести в командном редакторе команду mc. Мы создали директорию New, файл new и его копию "new1", мы можем убедиться в их существовании через Midnight Commander:
А также через Midnight Commander мы можем просмотреть содержимое файла new, выделив его и нажав <F3>:
6). Зайдя в корневой каталог, мы можем увидеть все системные папки Unix, речь о которых шла в предыдущей лабораторной работе:
7). Для создания исполняемого файла используется команда chmod. Чтобы сделать файл исполняемым, необходимо ввести chmod 711 "имя файла".
Первая цифра после команды указывает на права, которыми должен обладать создатель файла.
В нашем случае это "7" - это означает, что создатель файла имеет право читать, вносить изменения, запускать файл на исполнение.
Другие две цифры после команды указывают на права, которыми должны обладать члены группы, куда входит сам создатель файла, и права других пользователей.
Например, нам необходимо сделать файл new исполняемым. Для этого вводим chmod 711 new и запускаем файл на исполнение. Мы видим, что файл стал исполняемым, и команды записанные в файле выполнены:
8). Для вывода на экран содержимого текущей директории используется команда ls "имя директории".
9). Для перенаправления информации, используются символы ">", ">>". В случае ">" записывается заново, в случае символа ">>" добавляется:
Например, нам необходимо вывести содержимое текущей директории и поместить информацию в файл "file".
Для этого необходимо набрать "ls>file". После ввода этой команды, просмотрев содержимое файла "file", убеждаемся, что информация записана в этот файл.
10). Для вывода пути текущей директории на экран используется команда pwd.
Например, необходимо вывести информацию о полном пути текущей директории и добавить данные в файл file. Для этого необходимо ввести "pwd>>file".
Выполнив эту команду и просмотрев файл file, убеждаемся, что информация добавлена:
11. Для подсчёта числа строк в файле используется команда "wc-l<" будет "имя файла". В данном случае символ < говорит о перенаправлении ввода.
Например, необходимо подсчитать число строк в файле file. Для этого необходимо ввести "wc -l<file":
Конвейер - средство, которое связывает стандартный выход одной команды со стандартным входом другой команды.
Например, нам необходимо вывести содержимое текущей директории и подсчитать число строк в выведенном списке. Для этого нужно выполнить команду "ls|wc-l":
Для удаления директории используется команда rmdir "имя директории", для удаления используется команда rm "имя файла".
Например, необходимо удалить директорию New и файлы new, new1, file. Для этого вводим "rmdirNew;rmnewnew1f1":
2.3 Контрольные вопросы
программирование shell файл
1. Какая команда отвечает за вызов интерпретатора shell? Какие разновидности языка shell существуют?
2. Какие средства группировки в языке программирования shell?
3. В чём особенность выполнения команды в асинхронном режиме?
4. Какую функцию, кроме группировки, выполняют круглые скобки?
5. Для чего нужна команда, называемая фильтром? В каком случае она используется?
6. Что такое конвейер? В каких случаях он используется?
7. Какие символы используются при генерации имён файлов?
8. Какими способами можно создать файл? Какими способами можно сделать созданный файл исполняемым?
Размещено на Allbest.ru
Подобные документы
Эволюция развития персональных компьютеров и программного обеспечения. Переменные и подстановка их значений. Синтаксис языка shell. Подстановка результатов выполнения команд. Структура реестра Windows NT/2000. MS-DOS: ввод информации с клавиатуры.
контрольная работа [377,9 K], добавлен 22.11.2013Базовые инструменты Linux Shell и Make. Скриптовый язык Shell. Make как утилита, автоматизирующая процесс преобразования файлов из одной формы в другую. Встраиваемые системы Buildroot и OpenWrt на базе Linux. Переменные и блоки define BuildPackage.
курсовая работа [27,4 K], добавлен 19.01.2016Создание программы для среды UNIX, проверяющей атрибут выполнения файла для текущего пользователя. Особенности прав доступа для каталогов. Командный интерпретатор shell; общий синтаксис скрипта. Установка атрибутов защиты для групп пользователей.
курсовая работа [18,8 K], добавлен 12.05.2013Выбор типовой архитектуры. Схема работы Shell-скрипта. Вывод информации на сайт. Обеспечение его безопасности. Внедрение проекта на сервер. Построение заключительного запроса. Оценка времени работы приложения. Настройка авторизации по открытому ключу.
курсовая работа [950,6 K], добавлен 22.03.2018Файловый ввод/вывод с использованием разных классов. Вызовы операционной системы. Использование вызовов операционной системы. Основные способы открытия файла. Замена файла, связанного со стандартными устройствами ввода/вывода. Операции чтения файла.
курсовая работа [1,1 M], добавлен 09.12.2016Основные положения и особенности работы в текстовом редакторе Microsoft Word, набор текста и правила оформления таблиц. Порядок вычислений в табличном редакторе Microsoft Excel. Основы программирования на языке Паскаль, примеры составления программ.
контрольная работа [26,7 K], добавлен 07.03.2010Характеристика та класифікація регулярних виразів, їх сутність за теоріями автоматів та формальних мов, використання в електронній обробці текстів. Представлення символів за їх кодами. Скорочене позначення символьних класів, поняття квантифікації.
реферат [48,9 K], добавлен 09.06.2012Изучение программирования в MATLAB. Использование команд Save и Load, операторы ввода и вывода для работы в командном окне. Отладка собственных программ. Интерфейс MATLAB. Отличия поздней версии MATLAB от более ранних. Средство Source Control Interface.
контрольная работа [43,0 K], добавлен 25.12.2011Что такое операционная система, ее главные функции и классификация. Характеристика операционной системы MS-DOS4, организация данных. Особенности основных операций и команд системы, отработка практических навыков использования команд для работы на ПК.
контрольная работа [13,0 K], добавлен 04.03.2011Анализ различных командных интерпретаторов. Разработка структуры программы на языке программирования С и ее алгоритма. Требования для работы с ней. Действия, необходимые для её запуска и функционирования. Описание функций translate, sozd, info и f.
курсовая работа [238,2 K], добавлен 06.12.2014