Реферат: Программирование на Shell - текст реферата. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Реферат

Программирование на Shell

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 412 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

Узнайте стоимость написания уникальной работы

Программирование на языке 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] - стандарта мобил ьных систем ). Например , немалой популярностью п ользуется язык cshel l , есть также kshell , bashell и други е . Более того , каждый пользователь может с оздать свой командный язык . Может одновременн о на одном экземпляре операционной системы работать с разными командными языками . shell - это одна из многих команд UNIX . То есть в набор команд оболоч ки " shell " входит кома нда " sh " - вызов инте рпретатора " shell ". Первый " shell " вызывается ав томатически при вашем входе в систему и выдает на экран промтер . После этого вы можете вызывать на выполнение любые кома нды , в том числе и снова сам " shell ", который вам созда ст новую оболочку внутри прежней. Так например , если вы подготов ите в редакторе файл " f ile _ 1 ": echo Hello! то это будет обычный текстовы й файл , содержащий команду " echo ", которая при выполнении выдает все написанное правее е е на экра н . Можно сделать файл " f ile _ 1 " выполняемым с помощью команды " chmod 755 f ile _ 1 ". Но его можно выполнить , вызвав явно команду " sh " (" shell "): sh f ile _ 1 или sh < f ile 1 Файл можно выполнить и в текущем экземпляре " shell ". Для этого существует сп ецифическая команда " . " (точка ), т.е . . f ile _ 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 ". Для группировки команд также могут ис пользоваться фигурные " " и круглые " () " скоб ки . Рассмотрим примеры , сочетающие различные с пособы группировки : Если введена к омандна я строка command 1 && command 2 ; command 3 где command 1 , command 2 и command 3 - какие-то команды , то " command 2 " будет выполнена только при успешном завершении " command 1 "; после любого из исходов обработки " command 2 " (т.е . " command 2 " будет выполнена , л и бо пропущена ) будет выполнена " command 3 ". command 1 && command 2; command 3 Здесь обе команды (" command 2 " и " command 3 ") будут выполнены только при успешном завершении " command 1 ". command 1; command 2 & В фоновом режиме будет выполн яться последовательн ость команд " command 1 " и " command 2 ". Фоновые процессы сложно уничтожить , поско льку традиционная команда " 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 >f ile _ 1 команда " ls " сформирует спи сок файлов текущего каталога и поместит его в файл " f ile _ 1 " (вместо в ыдачи на экран ). Если файл " f ile _ 1 " до этого существовал , то он будет затерт новым . pwd >>f ile _ 1 команда pwd сформирует полное имя текущего каталог а и поместит его в конец файла " f ile _ 1 ", т.е . " >> " добавляет в файл , если он непустой . Символы " < " и " << " обозначают пе ренаправление ввода . wc -l f ile _ 4 и wc -l >f ile_ 4 f ile_ 2 Данный конвейер из файла " f ile _ 1 " (" cat ") выберет все строки , со держащие слово " result " (" grep "), отсортирует (" sort ") полученные строки , а затем пронумерует (" cat -b ") и выведет результат в файл " f ile _ 2 ". Поскольку у стройства в ОС UNIX представлены специальным и файлами , их можно использовать при перен аправлениях . Специальные файлы находятся в ка талоге " /dev ". Например , " lp " - печать ; " console " - консоль ; " tty i " - i -ый терминал ; " null " - фиктивный (пустой ) файл (устрой ство ). Тогда , например , ls > /dev/lp выведет содержимое текущего катал ога на печать , а f ile_ 1 < /dev/null обнулит файл " f ile_ 1 ". sort f ile_ 1 | tee /dev/lp | tail -20 В этом случае будет отсортиро ван файл " f ile _ 1 " и передан на печать , а 20 последн их строк также будут выданы на экра н . Вернемся к перенаправлению выхода . Станда ртные файлы имеют номера : 0 - stdin, 1 - stdout 2 - stderr. Если вам не желательно иметь на экране сообщение об ошибке , вы мож ете перенаправить его с экрана в указанны й вами файл (или вообще "выбросить ", п еренаправив в файл "пустого устройства " - /dev/null). Нап ример при выполнении команды cat f ile _ 1 f ile _ 2 которая должна выдать на экра н последовательно содержимое файлов " f ile _ 1 " и " f ile _ 2 ", выдаст вам , на пример , следующее 111111 222222 cat: f2: No such file or directory где 111111 222222 - содержимое файла " f ile _ 1 ", а файл " f ile _2 " отсутствует , о че м команда " cat " выда ла сообщение в стандартный файл диагностики , по умолчанию , как и стандартный выход , представленный экрано м . Если вам не желательно такое сообщени е на экране , его можно перенаправить в указанный вами файл : cat f ile _ 1 f ile _ 2 2>f-err сообщения об ошибках будут на правляться (об этом говорит перенаправление " 2> ") в файл " f-err ". Кстати , вы можете всю информацию направлять в один файл " ff ", использовав в данном случае конструкцию cat f ile _ 1 f ile _ 2 >>ff 2>ff Можно указать не только какой из стандартных файлов перенаправлять , но и в какой стандартный файл осуществить пе ренаправление . cat f ile _ 1 f ile _ 2 2>>ff 1>&2 Здесь сначала " stderr " перенаправляется (в режиме добавления ) в файл "ff", а затем стандартный выход перена правляется на " stderr ", которым к этому моменту является файл " ff ". То есть результа т будет аналогичен предыдущему . Конструкция " 1>&2 " - означает , что кроме номера стандартног о файла , в который перенаправить , необходимо впереди ставить " & "; вся конструкция пишется без пробелов . <- закрывает стандартный ввод. >- закрывает стандартный вывод. 2 . 4 . Командные файлы. Для того , чтобы текстовый файл можно было использовать как команду , существует несколько возможностей . Пусть с помощью редактора создан файл с именем " cmd ", содержащий одну строку следующего вида : date; pwd; ls Можно вызвать shell как команду , обо значаемую " sh ", и передать е й файл " cmd ", как аргумент или как перенаправленный вход , т.е . $ sh cmd или $ sh f ile_1 echo ' str_1 str_2 ' > f ile_ 2 cat f ile_ 1 f ile_ 2 даст выдаст последовательно одина ковые файлы f ile_1 и f ile_ 2 : str_1 str_2 str_1 str_2 Заметим также , что бэк-слэш (\ ) н е только экранирует следующий за ним симв ол , что позволяет использовать специальные си мволы просто как символы , представляющие сами себя (он может экранировать и сам себ я - \\ ), но в командном файле бэк-слэш позволяет об 'единять строки в одну (экрани ровать конец строки ). Например , приводившийся ранее пример кома ндной строки : cat file_1 | grep -h result | sort | cat -b > file_2 может быть записан в командно м файле , скажем , ка к cat file_1 | grep -h \ result | sort | cat -b > file_2 Кстати , эффект продолжения команд ной строки обеспечивает и символ конвейера . В данном случае это может дать более симпатичный результат , например : cat file_1 | grep -h result | sort | cat -b > file_2 3 .3. Манипу ляции с shell-переменными Несмотря на то , что shell -переменные в общем случае вос принимаются как строки , т . е . " 35 " - это не число , а ст рока из двух символов " 3 " и " 5 ", в раде случаев они могут интерпретиров аться иначе , например , как целые числа . Разнообразные возможности имеет команда " expr ". Проиллюстрируем некоторые на примерах : Выполнение командного файла : x=7 y=2 a=`expr $x + $y` ; echo a=$a a=`expr $a + 1` ; echo a=$a b=`expr $y - $x` ; echo b=$ b c=`expr $x '*' $y` ; echo c=$c d=`expr $x / $y` ; echo d=$d e=`expr $x % $y` ; echo e=$e выдаст на экран a=9 a=10 b=-5 c=14 d=3 e=1 Операция умножения (" * ") обязательно должна быть заэкранирована , поскольку в shell этот значок воспринимается , как спецсимвол , означающий , что на это место может быть подставлена любая после довательность символов. С командой " expr " возможны не только (целочисленные ) арифметические операции , но и строковые : A=`expr 'cocktail' : 'cock'` ; echo $A B=`expr 'cocktail ' : 'tail'` ; echo $B C=`expr 'cocktail' : 'cook'` ; echo $C D=`expr 'cock' : 'cocktail'` ; echo $D На экран будут выведены числа , показывающее число совпадающих символов в цепочках (от начала ). Вторая из строк не может быть длиннее первой : 4 0 0 0 3 .4. Экспор т переменных В ОС UNIX суще ствует понятие процесса . Процесс возникает то гда , когда запускается на выполнение какая-либ о команда . Например , при наборе на клавиатуре " р " порождается про цесс " р ". В свою очередь " р " мо жет породить другие процессы . Допустим , что " р " вызывает " р 1 " и " р 2 ", которые последовательно порожда ют соответствующие процессы . У каждого процесса есть своя среда - множество доступных ему переменных . Например , до запуска " р " уже существовала сре да , в которой уже были определены некоторые переменные . Запуск " р " порождает нов ую среду ; уже в ней будут порождены " р 1 " и " р 2 ". Переменные локальны в рамках процесса , в котором они объявлены , т.е . где им присвоены значения . Для того , чтобы они бы ли досту пны и другим порождаемым проц ессам , надо передать их явным образом . Для этого используется встроенная команда " export ". 3 .5. Параме тры В командный файл могут быть переданы параметры . В shell используются позиционные параметры (т .е . существенна очередность их следования ). В кома ндном файле соответствующие параметрам переменны е (аналогично shell -пер еменным ) начинаются с символа " $ ", а далее следует одна из цифр от 0 до 9 : Пусть " examp-1 " выз ывается с параметрами " cock " и " tail ". Э ти параметры попадают в новую среду под стандартными именами " 1 " и " 2 ". В (стандартной ) переменной с именем " 0 " будет храниться имя вызва нного расчета . При обращении к параметрам перед цифрой ставится символ доллара " $ " (как и при обращении к переменным ): $0 соответствует имени данног о командного файла ; $1 первый по порядку параметр ; $2 второй параметр и т.д . Поск ольку число переменных , в которые могут пе редаваться параметры , ограничено одной цифрой , т.е . 9 -ю (" 0 ", как уже отмечалось имеет о собый смысл ), то для передачи большего числа параметров используется специальная кома нда " shift ". Своеобразный подход к параметрам дает команда " set ". Например , фрагмент set a b с echo первый =$1 второй =$2 третий =$3 выдаст на экран первый =a второй =b трети й =c т.е . команда " set " устанавливает значения параметров . Это бывает очень удобно . Например , команда " date " выдает на эк ран текущую дату , скажем , "Mon May 01 12:15:10 2000", состоящую из пяти слов , тогда set `date` echo $1 $3 $5 выдаст на экран Mon 01 2000 Команда " set " позволяет также осуществл ять контроль выполнения программы , например : set -v на терминал выводятся строки , читаемые shell. s et +v отменяет предыдущий режим . s et -x на терминал выводятся команды перед выполнением . s et +x отменяет предыдущий режим . Ко манда " set " без пара метров выводит на терминал состояние программ ной среды . 3 .6. Подста новки shell-интерпретатора Перед началом непосредственной интерпретации и выполнением команд , содержащихся в командных файлах , shell выполняет различные виды подстановок : ПОДСТАНОВКА РЕЗУЛЬТАТОВ. Выполняются все команды , заключенные в обратные кавычки , и на их место подст авляется результат . ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ И ПЕРЕМЕН НЫХ. То есть слова , начинающи еся на "$", заменяются соответствующими знач ениями переменных и параметров . ИНТЕРПРЕТАЦИЯ ПРОБЕЛОВ. Заэкрани рованные пробелы игнорируются . ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ. Прове ряются слова на наличие в них спецсимволо в ("*", "?","[]") и выполняются соответствующи е генер ации . 3 .7. Програ ммная среда Каждый процесс имеет среду , в которой он выполняется . Shell использует ряд переменных этой среды . Если вы наберете команду "set" без параме тров , то на экран будет выдана информация о ряде ста ндартных переменных , создан ных при входе в систему (и передаваемых далее всем вашим новым процессам "по на следству "), а также переменных , созданных и экспортируемых вашими процессами . Конкретный вид и содержание выдаваемой информации в немалой степени зав исит от того , какая версия UNIX используется и к ак инсталлирована система . Результат выполнения команды set без параметров (не полный ): HOME=/ root PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11: IFS= LOGNAME=sae MAIL=/var/spool/mail/sae PWD=/ho me/sae/STUDY/SHELL PS1=$ PWD :" " PS2=> SHELL=/bin/bash Прокомментируем значения переменных . HOME=/ root - это имя домашнего директория , в кот ором пользователь оказывается после входа в систему . То есть , правильно набрав имя и пароль , я окажусь в директ ории " / root ". PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11 - эта переменная задает последовате льность файлов , кото рые просматривает " shell " в поисках команды . Имена файлов раз деляются здесь двоеточиями . Последовательность пр осмотра соответствует очеред ности следования имен в тропе . Но первоначально поиск происходит среди так называемых встроенных ко манд . В число встроенных команд входят наи более часто используемые команды , например " echo ", " cd ", " pwd ", " date ". После этого сис тема просматривает директори й " /bin ", в котором могут наход иться команды " sh ", " cp ", " mv ", " ls " и т.п . Затем директорий " /usr/bin " с командами " cat ", " сс ", " expr ", " nroff ", " man " и многими другими . Далее поиск происходит в текущем директории (".", или другое обозначение "пусто ", т.е. ""), где скорее всего находя тся написанные вами команды. После набора командной строки и нажат ия " shell " (после вы полнения необходимых подстановок ) распознает имя , соответствующее команде и осуществляет ее поиск в директориях , перечисленных в PATH . Если команда размещена вне этих директориев , она не буд ет найдена . Если присутствует несколько коман д с одинаковым именем , то вызвана будет та , которая расположена в директории , просма триваемом первым. PATH , как и прочие переменные , можно легко менять , до бавляя , переставляя или исключая директор ии. IFS= (Внутренний Разделитель Полей ) перечисляет символы , которые служат для разделения сл ов (полей ). Таковыми являются "пробел ", "табуляция " и "перевод строки ", поэтому здесь слева от присваивания ничего не видн о и занято две строки. LOGNAME= root - имя входа ("имя " пользователя ). MAIL=/var/spool/mail/ root - имя файла , в который поступает (электронная ) почта . PWD=/ root - имя текущего директория PS1=$ PWD :" " - вид промтера . В данном случае в промптере будет выдав аться имя текущег о директория двоеточие и пробел . То есть здесь будет " / root : ". PS2=> - этот промтер (здесь ">") используется как приглашение к продолжению ввода (в очередной строке ) незаконченной команды . Например , набер ите открывающую скобку "(" и после нажатия в следующей строке вы увидите этот промптер . Если пока не знаете , что дальш е делать , наберите закрывающую скобку ")" и о н исчезнет. SHELL=/bin/sh - эта переменная указывает оболочку , ко торую использует пользователь . В данном случа е использ уется стандартный shell (" sh ") . Исходная среда устанавливается ав томатически при входе в систему с использ ованием файлов типа "/etc/rc" и "/etc/.profile". Один из способов просто измен ит среду (например , тропу поиска команд , ви д промтера , вид оболочки , цв ет экрана и т.п .) можно , разместив эту информацию в своем домашнем директории в специализиро ванном файле " .profile " ( $ HOME /.profile ), присвоив нуж ные значения переменным среды . То есть выз вать это файл в редактор и написать , ч то пожелаете ). Тогда при каж дом вашем входе в систему этот файл будет авто матически выполняться и устанавливать новую с реду . Этот файл должен ОБЯЗАТЕЛЬНО размещатьс я в вашем ДОМАШНЕМ директории (директории входа ). Следует иметь в виду , что имена файлов , начинающиеся с точки , вообще и меют особый статус . Так , они не в ыдаются на экран простой командой " ls " - необходимо вызывать эту команду с флагом " -a ". Кстати , и не уничтожаются огульно к омандой " rm * ". Сам интерпретатор shell автоматически присваивает значения следующим переменным (па раметрам ): ? значение , возвращенное после дней командой ; $ номер процесса ; ! номе р фонового процесса ; # число позиционных параметров , передаваемых в shell; * пере чень параметров , как одна строка ; @ пере чень параметров , как совокупность слов ; - фла ги , передаваемые в shell. При обращении к этим переменным (т.е при использовании их в командном фа йле - shell-программе ) следует впереди ставить "$". Важную роль при создании уникальных ф айлов играет специальная переменная "$$", значение которой соотв етствует номеру процесса , выполняющего данный расчет . Каждый новый расч ет , выполняемый компьютером , инициирует один и ли несколько процессов , автоматически получающих номера по порядку . Поэтому , используя ном ер процесса в качестве имени файла , можно быть у в еренным , что каждый но вый файл будет иметь новое имя (не зап ишется на место уже существующего ). Достоинств о является и главным недостатком такого с пособа именования файлов . Неизвестно , какие им ена будут присвоены файлам . И , если в р амках данного процесса м ожно найти файл "не глядя ", т.е ., обратившись к нему , используя $$, то потом такие файлы можно легко потерять . Это создает дополнительные проблемы при отладке программ . 3.8. Вызов интерпритатора Вслед за регистрацией пользователя в системе (с помощью ком анды login ) вызывается интерпретатор языка SHELL . Если рег истрационный справочник пользователя содержит фа йл . profile , то прежде чем с терминала будет принята хотя б ы одна команда , интерпретатор выполняет этот файл (подразумевается , что файл . profile содер жит команды ). При вызове могут указываться следующие ключи : -c ст рока Команды считываются из заданной строки . -s Команды читаются из стандартного файла ввода . Сообщения интерпретатора записываются в стандартный файл диагностик . -i Интерактивный режим работы . Если первым символом параметра "0" является знак - , то команды считываются из файла . profile . 4 . ПРОГРАМ МНЫЕ СТРУКТУРЫ Как во всяком языке программирования в тексте на языке shell могут быть комментари и . Для этого исп ользуется символ "#". Все , что находится в строке (в командном ф айле ) левее этого символа , воспринимается инте рпретатором как комментарий . Например , # Это комментарий. Как во всяком процедурном язы ке программирования в языке shell есть операторы . Ряд опе раторов позволяет управлять п оследовательностью выполнения команд . В таких операторах часто необходима проверка условия , которая и определяет направление продолжения вычислений . 4 .1. Команд а test ("[ ]") Команда test пр оверяет в ыполнение некоторого условия . С использованием этой (встроенной ) команды форм ируются операторы выбора и цикла языка shell. Два возможных формата команды : test условие или [ условие ] мы будем пользоваться вторым вариантом , т.е . вместо того , чтобы писа т ь перед условием слово " test ", будем заключать условие в скобк и , что более привычно для программистов . На самом деле shell будет распознавать эту команду по открывающей скобке " [ ", как слову , соответствующему команде " test ". Между скобками и содержащимся в них условием обязатель но должны быть пробелы . Пробелы должны быть и между значениям и и символом сравнения или операции В shell использу ются условия различных "типов ". УСЛОВИЯ ПРОВЕРКИ ФАЙЛОВ : -f file файл "file" является обычным файлом ; -d file файл "file" - каталог ; -с file файл "file" - специальный файл ; -r file им еется разрешение на чтение файла "file"; -w file имеется разрешение на запись в файл "file"; -s file файл "file" не пустой. УСЛОВИЯ ПРОВЕРКИ СТРОК : str1 = str2 строки "str1" и "str2" совпад ают ; str1 != str2 строки "str1" и "str2" не совпадают ; -n str1 строка "str1" существует (непустая ); -z str1 строка "str1" не существует (пустая ). Пр имеры . x="who is who"; export x; [ "who is who" = "$x" ]; echo $? 0 x=abc ; export x ; [ abc = "$x" ] ; echo $? 0 x=abc ; export x ; [ -n "$x" ] ; echo $? 0 x="" ; export x ; [ -n "$x" ] ; echo $? 1 Кроме того , существуют два ста ндартных значения условия , которые могут испо льзоваться вместо условия (для этого не ну жн ы скобки ). УСЛОВИЯ СРАВНЕНИЯ ЦЕЛЫХ ЧИСЕЛ : x -eq y "x" равно "y", x -ne y "x" неравно "y", x -gt y "x" больше "y", x -ge y "x" больше или равно "y", x -lt y "x" меньше "y", x -le y "x" меньше или равно "y". СЛОЖНЫЕ УСЛОВИЯ : Реализуются с помощью типовых логич еских операций : ! (not) инвертирует значение ко да завершения . -o (or) соответствует логическому "ИЛИ ". -a (and) соответствует логическому "И ". 4 .2. Условный оператор "if" В общем случае оператор " if " имеет структуру if условие then список [ elif условие then список ] [ else список ] fi Здесь " elif " сокращенный вариант от " else if " может быть использован наряд у с полным , т.е . допускается вложение произ вольного числа операторов "if" (как и других операторов ). Разумеется "список " в каждом случае должен быть осмысленный и допустимы й в данном контексте . Самая усеченная структура этого оператора if условие then список fi если выполнено условие (как пр авило это ком получен код завершения "0", то вы полняется "список ", иначе он пропуск ается . Примеры . Пусть написан " if-1 " if [ $1 -gt $2 ] then pwd else echo $0 : Hello! f i Тогда вызов if-1 12 11 даст /home/sae/STUDY/SHELL а if-1 12 13 даст if-1 : Hello! 4 .3. Операт ор вызова ("case") Оператор выбора " case " имеет структуру : case строка in шаблон ) список команд ;; шаблон ) список команд ;; ... шаблон ) список команд ;; esac Здесь " case " " in " и " esac " - служебные слова . " Строка " (это может быть и один символ ) сравнивается с "шаблоном ". Затем выполняется "список команд " выбранной строки . Непривычно выглядят в конце строк выб ора ";;", но написать здесь ";" было бы ошибкой . Для каждой альтернативы может быть выпол нено несколько команд . Если эти команды бу дут записаны в одну строку , то симво л ";" будет использоваться как разделитель коман д . Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает "любое значение ". Эта строка выбирается , если не п роизошло совпадение значения переменной (здесь $z) ни с о дним из ранее записанных шаблонов , ограниченных скобкой ")". Значения просм атриваются в порядке записи . 4 .4. Операт ор цикла с перечислением ("for") Оператор цикла " for " имеет структуру : for имя [ in список значений ] do список команд done где " for " - служебное слово определяющее тип цикл а , " do " и " done " - служебные слова , выде ляющие тело цикла . Пусть команда "lsort" представлена командным фа йлом for i in file_1 file_2 file_3 do proc _ sort $i done В этом примере имя " i " и грает роль п араметра цикла . Это имя можно рассматривать как shell -переменную , которой последовательно присваиваются перечисленн ые значения ( i=file_1 , i=file_2 , i=file_3 ), и выполняется в цикле кома нда " proc _ sort ". Часто используется форма " for i in * ", оз начающая "для всех файлов текущего каталога ". Пусть " proc _ sort " в свою очередь представляется командным файлом cat $1 | sort | tee /dev/lp > $ 1 _sorted т.е . последовательно сортируются у казанные файлы , результаты сортировки выводятся на печать (" /dev/l p ") и направляются в файлы file_1_sorted file_2_sorted и file_3_sorted 4 .5. Операт ор цикла с истинным условием ("while") Структура " while ", также обеспечивающая выполнение расчетов , предпо чтительнее тогда , когда неизвестен заран е е точный список значений параметров или э тот список должен быть получен в результа те вычислений в цикле . Оператор цикла " while " имеет структуру : while условие do список команд done где " while " - служебное слово определяющее тип цикл а с истинным усло вием . Список команд в теле цикла (между " do " и " done ") повторяется до тех пор , пока сохраняется истинность условия (т.е . код завершения посл едней команды в теле цикла равен " 0 ") или цикл не будет пре рван изнутри специальными командами (" break ", " continue " или " exit "). При первом входе в цикл условие должно выполняться . Команда " break [n] " п озволяет выходить из цикла . Если " n " отсутствует , то это экв ивалентно " break 1 ". " n " указывает число вложе нных циклов , из которых надо выйти , наприм ер , " break 3 " - выход из трех вложенных циклов . В отличие от команды " break " команда " continue [n] " лишь прекращает выполнение текущего цикла и возвращает на НАЧАЛО цикла . Она также может быть с параметром . Например , " continue 2 " означает вы ход на начало второго (если считать из глубины ) вложенного цикла . Команда " exit [n] " п озволяет выйти вообще из процедуры с кодо м возврата " 0 " или " n " (если параметр " n " указан ). Эта команда может использоваться не только в циклах . Даже в линейной последовательности команд она может быть по лезна при отладке , чтобы прекратит выполнение (текущего ) расчета в заданной точке . 4 .6. Операт ор цикла с ложным условием ("until") Оператор цикла " until " имеет структуру : until условие do список команд done где " until " - сл ужебное слово определяющее тип цикла с ложным условием . Список команд в теле цикла (между " do " и " done ") п овторяется до тех пор , пока сохраняется ло жность условия или цикл не будет прерван изнутри специальными командами (" break ", " continue " или " exit "). Пр и первом входе в цикл условие не должно выполняться . Отличие от оператора "while" состоит в том , что условие цикла проверяется на ложност ь (на ненулевой код завершения последней к оманды тела цикла ) проверяется ПОСЛЕ каждого (в том числе и первого !) выполн ени я команд тела цикла . Пример . until false do read x if [ $x = 5 ] then echo enough ; break else echo some more fi done Здесь программа с бесконечным циклом ждет ввода слов (повторяя на экр ане фразу " some more "), по ка не будет введено " 5 ". После этого выдается " enough " и команда " break " прекращает выполнение цик ла . 4 .7. Пустой оператор Пустой оператор имеет формат : Ничего не делает . Возвращает з начение "0".". 4 .8. Функци и в shell Функция позволяет подготовить список команд shell для последующего выполнения . Описание функции имеет вид : имя () список команд после чего обращение к функци и происходит по имени . При выполнении функ ции не создается нового процесса . Она выпо лняется в сред е соответствующего процесса . Аргументы функции становятся ее позиционным и параметрами ; имя функции - ее нулевой пар аметр . Прервать выполнение функции можно опер атором " return [n] ", где (н еобязательное ) " n " - код возврата . 4 .9. Обрабо тка преры ваний ("trap") Бывает необходимо защитить выполнение про граммы от прерывания . Наиболее часто п риходится встречаться со следующими прерываниями , соответствующими сигналам : 0 выход из интерпретатора , 1 отбой (отключение удаленного абонента ), 2 прерывание от , 9 унич тожение (не перехватывается ), 15 окон чание выполнения . Для защиты от прерываний существует команда " trap ", имеющ ая формат : trap 'список к оманд ' сигналы Если в системе возникнут прерывания , ч ьи сигналы перечислены ч ерез пробел в "сигналы ", то будет выполнен "список команд ", после чего (если в списке команд не была выполнена команда " exit ") управление вернется в точку пре рывания и продолжится выполнение командного ф айла . Например , если перед прекращением по п рерывани ям выполнения какого то командног о файла необходимо удалить файлы в " /tmp ", то это может быть выполнено командой " trap ": tarp 'rm /tmp/* ; exit 1' 1 2 15 которая предшествует прочим коман дам файла . Здесь , после удаления файлов бу дет осуществлен выход " ex it " из командного файла .
1Архитектура и строительство
2Астрономия, авиация, космонавтика
 
3Безопасность жизнедеятельности
4Биология
 
5Военная кафедра, гражданская оборона
 
6География, экономическая география
7Геология и геодезия
8Государственное регулирование и налоги
 
9Естествознание
 
10Журналистика
 
11Законодательство и право
12Адвокатура
13Административное право
14Арбитражное процессуальное право
15Банковское право
16Государство и право
17Гражданское право и процесс
18Жилищное право
19Законодательство зарубежных стран
20Земельное право
21Конституционное право
22Конституционное право зарубежных стран
23Международное право
24Муниципальное право
25Налоговое право
26Римское право
27Семейное право
28Таможенное право
29Трудовое право
30Уголовное право и процесс
31Финансовое право
32Хозяйственное право
33Экологическое право
34Юриспруденция
 
35Иностранные языки
36Информатика, информационные технологии
37Базы данных
38Компьютерные сети
39Программирование
40Искусство и культура
41Краеведение
42Культурология
43Музыка
44История
45Биографии
46Историческая личность
47Литература
 
48Маркетинг и реклама
49Математика
50Медицина и здоровье
51Менеджмент
52Антикризисное управление
53Делопроизводство и документооборот
54Логистика
 
55Педагогика
56Политология
57Правоохранительные органы
58Криминалистика и криминология
59Прочее
60Психология
61Юридическая психология
 
62Радиоэлектроника
63Религия
 
64Сельское хозяйство и землепользование
65Социология
66Страхование
 
67Технологии
68Материаловедение
69Машиностроение
70Металлургия
71Транспорт
72Туризм
 
73Физика
74Физкультура и спорт
75Философия
 
76Химия
 
77Экология, охрана природы
78Экономика и финансы
79Анализ хозяйственной деятельности
80Банковское дело и кредитование
81Биржевое дело
82Бухгалтерский учет и аудит
83История экономических учений
84Международные отношения
85Предпринимательство, бизнес, микроэкономика
86Финансы
87Ценные бумаги и фондовый рынок
88Экономика предприятия
89Экономико-математическое моделирование
90Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Казалось бы, куда уж хуже. Ан нет, вот сюда.
Anekdot.ru

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

Обратите внимание, реферат по программированию "Программирование на Shell", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2016
Рейтинг@Mail.ru