Правила программирования в Shell Выполнение shell-программ
Интерпретатор команд Shell как программа UNIX, которая поддерживает обладающий большими возможностями командный язык. Метасимволы, синтаксис и зарезервированные слова. Правила программирования в Shell, основные команды и создание командных оболочек.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 06.08.2013 |
Размер файла | 30,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Основные положения Shell
2. Команды и создание командных оболочек
2.1 Команды
2.2 Как Shell находит команды
3. Пример работы интерпретатора Shell
4. Специальные команды Shell
5. Правила программирования в Shell
6. Выполнение shell-программ
6.1 Запуск shell'а
6.2 Выполнение
6.3 Окружение
6.4 Сигналы
6.5 Замечания
7. Число генерируемых процессов
8. Метасимволы, синтекс и зарезервированные слова
8.1 Синтаксис Shell
8.2 Синтаксические
8.3 Шаблоны
8.4 Подстановки
8.5 Квотирование
8.6 Зарезервированные слова
Заключение
Список литературы
Введение
Когда пользователи входят в систему UNIX, они общаются с одним из интерпретаторов команд. В этой главе изучается интерпретатор команд Shell. Этот интерпретатор является программой UNIX, которая поддерживает обладающий большими возможностями командный язык. Каждый вызов этого интерпретатора называется оболочкой Shell; каждая оболочка выполняет единственную функцию - считывает со стандартного устройства ввода команду и выполняет ее.
Поскольку Shell дает пользователю возможность общаться с операционной системой на языке высокого уровня, UNIX может выполнять задачи, недоступные менее сложным операционным системам. Команды, которые обычно должны писаться на традиционных языках программирования, здесь могут быть записаны в нескольких строчках процедуры Shell. В других операционных системах команды выполняются в прямой последовательности.
В UNIX благодаря Shell команды могут:
- объединяться для образования новых команд;
- передавать позиционные параметры;
- добавляться или переименоваться пользователем;
- выполняться внутри циклов или по определенному условию;
- создаваться для локального выполнения без риска вступления в конфликт с командами других пользователей;
- выполняться в фоновом режиме.
Более того, команды могут перенаправлять ввод исходных данных для команды от одного источника к другому и перенаправлять вывод в файл, на терминал, принтер или другой команде. Это обеспечивает необходимую гибкость при выполнении конкретных задач.
1. Основные положения Shell
Shell - первая программа с которой по существу начинается работа пользователя. После ввода логина и пароля пользователем запускается программа, указанная в последнем поле записи пользователя. Этой программой является командный интерпретатор Shell. Shell выполняет соответствующий командный файл инициализации, и выдает на терминал пользователя приглашение. С этого момента можно начинать вводить команды. Shell считывает ввод пользователя, производит синтаксический анализ введённой строки и выполняет действие, предписанное пользователем или сообщает об ошибке. По окончании работы пользователь вводит команду exit и выходит из системы. Командный интерпретатор является удобным средством программирования.
Любой из стандартных командных интерпретаторов имеет развитый язык программирования. Следует однако иметь в ввиду, что shell является интерпретатором, он последовательно считывает команды из скрипта и выполняет их, как если бы они последовательно вводились пользователем с терминала. При таком характере работы трудно ожидать большой производительности от скриптов, однако их эффективность определяется простотой и наглядностью. Если же производительность программы играет главную роль, то самым эффективным средством остаётся язык Си.
Shell сам по себе (т.е. программа, которая считывает ваши команды при входе в систему или которая вызывается по команде sh) является программой, написанной на языке Си; она не является частью операционной системы, а может рассматриваться как обычная пользовательская программа.
2. Команды и создание командных оболочек
Наиболее простой способ использования Shell - это ввод простых команд с клавиатуры. Простая команда - это любая последовательность аргументов, разделенных пробелами или знаками табуляции. Первый аргумент (с порядковым номером 0) определяет имя команды, которая должна быть выполнена. Все остальные аргументы, за некоторыми исключениями, передаются этой команде. Например, чтобы вызвать печать на принтер файлов с именами allan, barry и calvin можно дать следующую команду: lpr allan barry calvin.
Если первый аргумент команды определяет имя файла, который помечен выполняемым (что определяется по значениям соответствующих битов разрешения этого файла) и действительно является скомпилированной программой, то Shell, как родитель, создает процесс-потомок, который немедленно начинает выполнять эту программу. Если файл помечен как выполняемый, но не является скомпилированной программой, то предполагается, что это процедура Shell, т.е. обычный текстовый файл, содержащий строки с командами Shell. В этом случае Shell образует еще один интерпретатор команд (называемый подоболочкой, субоболочкой) для чтения файла и выполнения команд внутри этой подоболочки.
С точки зрения пользователя, скомпилированные программы и процедуры Shell вызываются абсолютно одинаково. Shell сам определяет тип файлов, что обеспечивает стандартность вызова.
2.1 Команды
shell unix интерпретатор синтаксис
Как правило, для выполнения каждой команды shell порождает отдельный процесс. Специальные команды отличаются тем, что они встроены в shell и выполняются в рамках текущего процесса. : - Пустая команда. Возвращает нулевой код завершения.
file Shell читает и выполняет команды из файла file, затем завершается; при поиске file используется список поиска $PATH.
break [n] - Выход из внутреннего for или while цикла; если указано n, то выход из n внутренних циклов.
continue [n] - Перейти к следующей итерации внутреннего for или while цикла; если указано n, то переход к следующей итерации n-ого цикла.
cd [ <аргумент> ] - Сменить текущую директорию на директорию <аргумент>. По умолчанию используется значение HOME.
echo [ <арг> ... ] - Выводит свои аргументы в стандартный вывод, разделяя их пробелами.
eval [ <арг> ... ] - Аргументы читаются, как если бы они поступали из стандартного ввода и рассматриваются как команды, которые тут же и выполняются.
exec [ <арг> ... ] - Аргументы рассматриваются как команды shell'а и тут же выполняются, но при этом не создается нового процесса. В качестве аргументов могут быть указаны направления ввода-вывода и, если нет никаких других аргументов, то будет изменено лишь направление ввода-вывода текущей программы.
exit [ n ] - Завершение выполнения shell'а с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команды (конец файла также приводит к завершению выполнения).
export [ <переменная> ... ] - Данные переменные отмечаются для автоматического экспорта в окружение (см. Окружение) выполняемых команд. Если аргументы не указаны, то выводится список всех экспортируемых переменных. Имена функций не могут экспортироваться.
hash [ -r ] [ <команда> ... ] - Для каждой из указанных команд определяется и запоминается путь поиска. Опция -r удаляет все запомненные данные. Если не указан ни один аргумент, то выводится информация о запомненных командах: hits - количество обращений shell'а к данной команде; cost - объем работы для обнаружения команды в списке поиска; command - полное имя команды. В некоторых ситуациях происходит перевычисление запомненных данных, что отмечается значком * в поле hits.
pwd - Выводит имя текущей директории.
read [ <переменная> ... ] - Читается из стандартного ввода одна строка; первое ее слово присваивается первой переменной, второе - второй и т.д., причем все оставшиеся слова присваиваются последней переменной.
readonly [ <переменная> ... ] - Запрещается изменение значений указанных переменных. Если аргумент не указан, то выводится информация обо всех переменных типа readonly.
return [ n ] - Выход из функции с кодом завершения n. Если n опущено, то кодом завершения будет код завершения последней выполненной команд
set [ --aefkntuvx [ <арг> ... ] ] - Команда устанавливает следующие режимы:
-a -отметить переменные, которые были изменены или созданы, как переменные окружения.
-e - если код завершения команды ненулевой, то немедленно завершить выполнение shell'а.
-f - запретить генерацию имен файлов.
-k - все переменные с именем помещаются в окружение команды, а не только те, что предшествуют имени команды.
-n - читать команды, но не выполнять их.
-t - завершение shell'а после ввода и выполнения одной команды.
-u - при подстановке рассматривать неустановленные переменные как ошибки.
-v - вывести вводимые строки сразу после их ввода.
-x - вывести команды и их аргументы перед их выполнением.
-- - не изменяет флаги, полезен для присваивания позиционным переменным новых значений.
При указании + вместо - каждый из флагов устанавливает противоположный режим. Набор текущих флагов есть значение переменной.
$-. <арг> - это значения, которые будут присвоены позиционным переменным $1, $2 и т.д. Если все аргументы опущены, выводятся значения всех переменных.
shift [ n ] - Позиционные переменные, начиная с $(n+1), переименовываются в $1 и т.д. По умолчанию n=1.
test - вычисляет условные выражения.
trap [ <арг> ] [ n ] ... - Команда <арг> будет выполнена, когда shell получит сигнал n .(Надо заметить, что <арг> проверяется при установке прерывания и при получении сигнала). Команды выполняются по порядку номеров сигналов. Любая попытка установить сигнал, игнорируемый данным процессом, не обрабатывается. Попытка прерывания по сигналу 11 (segmentation violation) приводит к ошибке. Если <арг> опущен, то все прерывания устанавливаются в их начальные значения. Если <арг> есть пустая строка, то этот сигнал игнорируется shell'ом и вызываемыми им программами. Если n=0, то <арг> выполняется при выходе из shell'а. Trap без аргументов выводит список команд, связанных с каждым сигналом.
type [ <имя> ... ] - Для каждого имени показывает, как оно будет интерпретироваться при использовании в качестве имени команды: как внутренняя команда shell'а, как имя файла или же такого файла нет вообще.
ulimit [ -f ] [ n ] - Устанавливает размер файла в n блоков; -f - устанавливает размер файла, который может быть записан процессом-потомком (читать можно любые файлы). Без аргументов - выводит текущий размер.
umask [ nnn ] - Пользовательская маска создания файлов изменяется на nnn. Если nnn опущено, то выводится текущее значение маски. Пример: после команды umask 755 будут создаваться файлы, которые владелец сможет читать, писать и выполнять, а все остальные - только читать и выполнять.
unset [ <имя> ... ] - Для каждого имени удаляет соответствующую переменную или функцию. Переменные PATH, PS1, PS2 и IFS не могут быть удалены.
wait [ n ] - Ждет завершения указанного процесса и выводит код его завершения. Если n не указано, то ожидается завершения всех активных процессов-потомков и возвращается код завершения 0.
2.2 Как Shell находит команды
Обычно интерпретатор Shell ищет команды, которые требуется выполнить в трех конкретных местах файловой системы. Сначала Shell пытается использовать имя команды в том виде, как оно указано. Если команда не найдена, то к имени добавляется /bin. Если это не помогает, по добавляется /usr/bin. Это означает, что поиск по порядку производится сначала в текущем каталоге, затем в каталоге /bin и после этого в каталоге /usr/bin. Например, команды pr и man могут быть на самом деле файлами с полными именами /bin/pr и /usr/bin/man. Можно указывать и более сложные пути для того, чтобы или поместить файл в конкретное место относительно текущего каталога пользователя, или чтобы обращаться к команде по ее полному имени. Если в команде имеется косая черта (/) (например /bin/sort dir/cmd), то к имени никаких путей для поиска добавляться не будет.
Поскольку текущий каталог обычно просматривается первым, пользователь может хранить в нем свою личную модификацию программы, которая не будет влиять на выполнение программ с таким же именем другими пользователями. Конкретная последовательность просмотра каталога может быть изменена переопределением переменной PATH.
3. Пример работы интерпретатора Shell
Ниже приводится фрагмент программы Shell, связанный с обработкой сигналов.
#
# Установка подпрограмм обработки сигналов
#
trap "echo
trap "echo
trap "echo
#
# Замечание: Если вы перешли в другой каталог, вы можете
# сбросить прерывание SIGQUIT с обнаружением файла "core".
# Для этого вставьте соответствующую строку после команды
# cd.
#
trap "echo
echo " Going into loop0
while true
do
cd /tmp
trap "echo
lf
cd /usr
trap "echo
lf
sleep 1
done
echo " Leaving the loop 0
exit 0
4. Специальные команды Shell
Существует несколько специальных команд, являющихся внутренними для Shell. Некоторые из них мы уже рассмотрели. Интерпретатору не требуется создавать под оболочку для выполнения этих команд и следовательно не создаются дополнительные процессы. Эти команды рекомендуем использовать везде, где это возможно, т.к. они работают быстрее и эффективнее, чем другие команды UNIX.
Некоторые из специальных команд мы уже рассмотрели, т.к. они влияют на управление процессами. Это точка (.), break, continue, exit и trap. Команда set также является специальной командой.
Описание остальных специальных команд приводится ниже:
: - Пустая команда. Она не делает ничего и может использоваться для вставки комментариев в процедуры. Ее код завершения равен 0 (true).
Все аргументы, передаваемые команде :, проверяются на синтаксические ошибки. Если выдается сообщение об ошибке, заключите эти аргументы в кавычки. Подстановка параметров выполняется как и для любых других команд.
cd arg - Делает arg текущим каталогом. Если arg не является каталогом или у пользователя нет права доступа к нему, команда завершается с ненулевым кодом завершения. Указание cd без аргументов эквивалентно вводу "cd $HOME", что возвращает вас в каталог загрузки.
exec arg - Если arg является командой, то Shell выполняет ее, не создавая под оболочки. В командной строке допускаются аргументы переадресации ввода-вывода. Если указаны только аргументы, перенаправляющие ввод-вывод, то изменяются только ввод-вывод самого интерпретатора Shell.
hash [-r] name - Этой командой запоминается место в пути поиска команды, указанной в name. Опция -r указывает Shell, что старые значения можно стереть. Если никаких аргументов не указывается, то выводится информация о запомненных командах. Hits - это количество раз, которое команда вызывалась Shell. Cost - это мера затрат, необходимых для нахождения команды. Бывают ситуации, требующие пересчета места расположения команды.
newgrp arg - Команда newgrp при выполнении создает новый интерпретатор Shell, который заменяет старый. Помните, что в новом Shell будут определены только переменные системы. Все переменные, которые раньше были помечены как экспортируемые, теперь станут обыкновенными.
pwd - Печатает текущий каталог.
read var - Из стандартного ввода считывается одна строка и первое слово интерпретируется как значение первой переменной, второе - как значение второй, и т.п. Все оставшиеся считанные слова присваиваются последней переменной.
Код завершения равен нулю, если не был считан символ конца файла.
readonly var - Указанные переменные помечаются как пригодные только для чтения, так что никаких последующих переприсвоений им сделать нельзя. Если никаких аргументов не указано, то выводится список всех помеченных таким образом переменных и переменных, которые экспортируются.
return n - Вызывает возврат из функции с кодом завершения, равным n. Если n не указано, то код завершения равен коду завершения последней выполненной команды.
times - Печатает суммарное время, использованное пользователем и процессами, запущенными из текущей оболочки.
type name - Для каждого указанного имени показывает, как оно будет интерпретироваться в случае, если будет использоваться в качестве имени команды.
ulimit [ -f] n - Эта команда устанавливает предел размера записываемого файла равным n блоков. Флаг -f устанавливает этот предел для файлов, записываемых дочерними процессами (считываться могут файлы любого размера). Команда, указанная без аргумента, показывает текущий установленный предел.
umask nnn - Устанавливает маску для создания файлов пользователя равной nnn. Если nnn отсутствует, то печатается текущее значение маски. Эта битовая маска используется для установки прав доступа к файлам при их создании. Например, значение маски, равное восьмеричному числу 137, соответствует следующей битовой маске и правам доступа для создаваемого файла:
------------T----------T------T------
¦ ¦пользоват.¦группа¦другие¦
+-----------+----------+------+------+
¦восьмеричн.¦ 1 ¦ 3 ¦ 7 ¦
+-----------+----------+------+------+
¦бит. маска ¦ 001 ¦ 011 ¦ 111 ¦
+-----------+----------+------+------+
¦доступ ¦ rw- ¦ r- ¦ --- ¦
L-----------+----------+------+-------
unset name - Для каждого указанного имени удаляет соответствующую переменную или функцию. Переменные PATH, PS1, PS2, MAILCHECK и IFS удалить нельзя.
wait n - Shell ждет завершения всех активных дочерних процессов. Если n указано, то Shell ждет завершения только указанного процесса. Код завершения команды wait всегда равен 0, если не указан аргумент n, в противном случае он равен коду завершения дочернего процесса n.
5. Правила программирования в Shell
В этом разделе приводятся стратегии написания эффективных процедур Shell, которые не тратят лишние ресурсы при выполнении поставленных задач. Основной задачей является достижение желаемого результата с минимальными затратами. Акцент всегда должен ставиться на простоту, ясность и удобочитаемость, но эффективность может быть достигнута при использовании определенных стратегий программирования. Во многих случаях переорганизация процедуры повышает ее эффективность за счет уменьшения размера, и часто облегчает ее понимание. В любом случае, вы можете не оптимизировать процедуры Shell, пока они вас устраивают по быстродействию и ресурсов системы хватает для ее выполнения.
Создание процедуры Shell состоит из таких же шагов, как и написание обычных программ: написания текста, определения его размера и оптимизации только отдельных важных частей. Пользователь должен уметь свободно пользоваться командой time, которую можно использовать для определения времени выполнения как всей процедуры, так и ее частей. Мы настоятельно рекомендуем пользоваться ей, т.к. человеческая интуиция непригодна для оценки времени выполнения программ. Каждый тест должен быть выполнен несколько раз, т.к. его результаты могут зависеть от загруженности системы в данный момент.
6. Выполнение shell-программ
6.1 Запуск shell'а
Программа, интерпретирующая shell-программы, находится в файле /bin/sh. При запуске ее первый аргумент является именем shell-программы, остальные передаются как позициональные параметры. Если файл, содержащий shell-программу, имеет право выполнения (x), то достаточно указания лишь его имени. Например, следующие две команды операционной системы эквивалентны (если файл ficofl обладает указанным правом и на самом деле содержит shell-программу):
sh ficofl -d . g\*
и
ficofl -d . g\*
6.2 Выполнение
При выполнении shell-программ выполняются все подстановки. Если имя команды совпадает с именем специальной команды, то она выполнается в рамках текущего процесса. Так же выполняются и определенные пользователем функции. Если имя команды не совпадает ни с именем специальной команды, ни с именем функции, то порождается новый процесс и осуществляется попытка выполнить указанную команду.
Переменная PATH определяет путь поиска директории, содержащей данную команду. По умолчанию это так:
::/bin:/usr/ bin:/util:/dss/rk
Директории поиска разделяются двоеточиями; :: означает текущую директорию. Если имя команды содержит символ /, значение $PATH не используется: имена, начинающиеся с / ищутся от корня, остальные - от текущей директории. Положение найденной команды запоминается shellом и может быть опрошено командой hash.
6.3 Окружение
Окружение - это набор пар имя-значение, которые передаются выполняемой программе. Shell взаимодействует с окружением несколькими способами. При запуске shell создает переменную для каждой указанной пары, придавая ей соответствующее значение. Если вы измените значение какой-либо из этих переменных или создадите новую переменную, то это не окажет никакого влияния на окружение, если не будет использована команда export для связи переменной shell'а с окружением. Переменная может быть удалена из окружения командой unset. Таким образом, окружение каждой из выполняемых shell'ом команд формируется из всех неизмененных пар имя-значение, первоначально полученных shell'ом, минус пары, удаленные командой unset, плюс все модифицированные и измененные пары, которые для этого должны быть указаны в команде export.
Окружение простых команд может быть сформировано указанием перед ней одного или нескольких присваиваний переменным. Так,
TERM=d460 <команда>
и
(export TERM; TERM=d460; <команда>)
эквивалентны. Переменные, участвующие в таких присваиваниях, назовем ключевыми параметрами.
Если установлен флаг -k (см. set), то все ключевые параметры помещаются в окружение команды, даже если они записаны после команды.
6.4 Сигналы
UNIX'ом поддерживаются следующие сигналы:
SIGHUP - 1 - отменить (hangup)
SIGINT - 2 - прерывание (interrupt)
SIGQUIT - 3 - нестандартный выход (quit)
SIGILL - 4 - неверная команда (illegal instruction)
SIGTRAP - 5 - ловушка (trace trap)
SIGFPE - 8 - исключительная ситуация при выполнении операций с плавающей запятой (floating-point exception)
SIGKILL - 9 - уничтожение процесса (kill)
SIGBUS - 10 - ошибка шины (bus error)
SIGSEGV - 11 - нарушение сегментации (segmentation violation)
SIGSYS - 12 - неверный системный вызов (bad argument to system call)
SIGPIPE - 13 - запись в канал без чтения из него (write on a pipe with no one to read it)
SIGALRM - 14 - будильник (alarm clock)
SIGTERM - 15 - программное завершение процесса (software termination signal)
Сигналы SIGINT и SIGQUIT игнорируются, если команда была запущена асинхронно. Иначе сигналы обрабатываются так же, как в процессе-предке, за исключением сигнала SIGSEGV.
6.5 Замечания
При выполнении команд запоминается их местонахождение. Поэтому при создании команды с тем же именем, но находящейся в другой директории, все равно будет выполняться старая команда (если вызов происходит по короткому имени). Для исправления ситуации воспользуйтесь командой hash с ключом -r.
Если вы переименовали текущую или вышележащую директорию, то команда pwd может давать неверную информацию. Для исправления ситуации воспользуйтесь командой cd с полным именем директории.
7. Число генерируемых процессов
Когда выполняется большое число коротких команд, то действительное время выполнения может быть значительно увеличено за счет создания вспомогательных процессов. Процедурами, для которых требуются значительные количества таких процессов, как правило являются процедуры, в которых выполняется много циклов и которые генерируют командные последовательности, которые должны интерпретироваться другим Shell.
Если вас беспокоит эффективность выполнения, вам надо знать, какие команды являются встроенными в Shell, а какие нет. Ниже приводится список всех встроенных команд:
break, case, cd, continue, echo, eval, exec, exit, export, for, if, read, readonly, return, set, shift, test, times, trap, umask, until, wait, while, ., :, {}
Обычные скобки () также являются встроенной командой, но команда, заключенная в них, выполняется как дочерний процесс, т.е. Shell разветвляется. Все остальные команды, не указанные в списке, являются внешними (требуют fork и exec).
Пользователь должен всегда хотя бы приблизительно знать число процессов, генерируемых процедурой. Для всех приведенных ранее процедур число генерируемых (не обязательно одновременно) процессов может быть оценено по формуле:
число процессов = (k*n) + c
где k и с - это константы, а n может быть количеством аргументов процедуры, количеством строк во входном файле, количеством файлов в каталоге и т.п. Повышение эффективности обычно достигается за счет уменьшения константы k. В качестве примера проанализируем процедуру с именем split, чей текст проведен ниже:
:
# split
trap 'rm temp$$; trap 0; exit' 0 1 2 3 15
start1=0 start2=0
b='[A-Za-z]'
cat > temp$$
# read stdin into temp file
# save original lengths of $1,$2
if test -s "$1"
then start1=`wc -l < $1`
fi
if test -s "$2"
then start2=`wc -l < $2`
fi
grep "$b" temp$$ >> $1
# lines with letters onto $1
grep -v "$b" temp$$ | grep '[0-9]' >> $2
# lines without letters onto $2
total=" `wc -l< temp$$` "
end1=" `wc -l< $1` "
end2=" `wc -l< $2` "
lost=" `expr $total - \($end1 - $start1\)\
- \($end2 - $start2\)` "
echo "$total read, $lost thrown away"
Для каждой итерации в цикле имеется одна команда expr и либо команда echo или другая команда expr. Еще одна дополнительная команда echo выполняется в конце процедуры. Если n - число строк на вводе, то количество процессов равно 2*n+1.
Некоторые разновидности процедур не следует писать на Shell'е. Так, например, если с каждым символом файла связан один или несколько процессов, хорошим решением будет перенос процедуры на язык Си. Shell-процедуры не следует использовать для посимвольного сканирования или посимвольного формирования файлов.
8. Метасимволы, синтекс и зарезервированные слова
8.1 Синтаксис Shell
элемент: слово
ввод-вывод
имя = значение
простая-команда: элемент
элемент простой-команды
команда: простая-команда
(список-команд)
{ список-команд }
for имя do список-команд done
for имя in слово do список-команд done
while список-команд do список-команд done
until список-команд do список-команд done
case слово in case-часть esac
if список-команд then список-команд else-часть fi
конвейер: команда
конвейер | команда
andor: конвейер
andor && конвейер
andor || конвейер
список-команд: andor
список-команд;
список-команд &
список-команд; andor
список-команд & andor
ввод-вывод: > файл
< файл
<< слово
>> файл
цифра > файл
цифра < файл
цифра >> файл
файл: слово
& цифра
& -
case-часть: шаблон) список-команд;;
else-часть: elif список-команд then список-команд else-часть
else список-команд
пустая-строка
пустая-строка:
слово: последовательность символов кроме пробелов
имя: последовательность букв, цифр или знаков подчеркива-
ния, начинающаяся с буквы
цифра: 0 1 2 3 4 5 6 7 8 9
8.2 Синтаксические
| символ канала
&& символ и-если
|| символ или-если
; разделитель команд
;; разделитель регистров
& фоновые команды
() группирование команд
< перенаправление ввода
<< ввод из документа
> создание вывода
>> добавление к выводу
# комментарий в конце строки
8.3 Шаблоны
* отображает любой символ(ы) включая и его отсутствие
? отображает любой одиночный символ
[...] отображает любые символы в скобках
8.4 Подстановки
${...} подстановка переменной оболочки
`...` подстановка вывода команд
8.5 Квотирование
\ квотирует следующий символ как литерал без специального значения
'...' квотирует символы в кавычках за исключением обратной кавычки
"..." квотирует символы в кавычках за исключением $`\"
8.6 Зарезервированные слова
if esac
then for
else while
elif until
fi do
case done
in {}
Заключение
В данной курсовой работе были описаны основные понятия интерпретатора Shell, его основное положение, основные команды интерпретатора Shell, была описана его работа, правила программирования в Shell, как выполняется Shell-программа. Далее в данной курсовой работе подробно описан синтакс Shell, и его основные зарезервированные слова, шаблоны, подстановки и т.д. Интерпретатор Shell выполняет важную роль в взаимодействии пользователя с ПК. Т.е. после ввода логина и пароля пользователем запускается программа. Этой программой является командный интерпретатор Shell.
Список литературы
1. Э. Таненбаум - Современные операционные системы.
2. В.Г. Олифер, Н.А. Олифер - Сетевые операционные системы.
3. А.В. Гордеев - Операционные системы, 2й том.
4. Кульгин М.В. Компьютерные сети. Практика построения.
5. Бормотов С.В. Системное администрирование на 100%.- СПб.: Питер,2006.-256с.
6. Н.В. Макарова. Информатика.- Москва 2001г.
Размещено на Allbest.ru
...Подобные документы
Создание программы для среды UNIX, проверяющей атрибут выполнения файла для текущего пользователя. Особенности прав доступа для каталогов. Командный интерпретатор shell; общий синтаксис скрипта. Установка атрибутов защиты для групп пользователей.
курсовая работа [18,8 K], добавлен 12.05.2013Эволюция развития персональных компьютеров и программного обеспечения. Переменные и подстановка их значений. Синтаксис языка 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Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.
презентация [3,3 M], добавлен 07.02.2012Типы команд, синтаксис ассемблера и код операции, по которому транслируется команда. Команды вычисления и непосредственной пересылки данных между регистрами. Поле для определения операции вычисления. Управление последовательностью выполнения программы.
реферат [29,1 K], добавлен 13.11.2009Файлы IO.SYS и MSDOS.SYS; командный процессор DOS. Базовая система ввода-вывода, загрузчик, диалог пользователя с DOS, команды. Недостатки языка програмирования с++. Создание и описание программы, позволяющей работать с файлами в среде DOS, ее алгоритм.
курсовая работа [24,4 K], добавлен 02.12.2009Что такое язык программирования. Для чего нужны языки программирования. Какие существуют языки программирования. Фортран. Алгол. Кобол. Лисп. Бейсик. Форт. Паскаль. Ада. Си. Пролог. Что такое компилятор и интерпретатор.
реферат [20,2 K], добавлен 27.05.2007Базовый синтаксис языка программирования С#. Объявление переменных и присваивание им значений. Управление порядком выполнения программы. Выполнение преобразований с помощью команд преобразования. Определение классов, конструктора, работа с файлами.
курс лекций [692,5 K], добавлен 23.11.2009Анализ различных командных интерпретаторов. Разработка структуры программы на языке программирования С и ее алгоритма. Требования для работы с ней. Действия, необходимые для её запуска и функционирования. Описание функций translate, sozd, info и f.
курсовая работа [238,2 K], добавлен 06.12.2014Язык программирования как формальная знаковая система, предназначенная для записи программ, его отличие от естественных языков. Прописные и строчные буквы латинского алфавита. Ключевые слова языка программирования. Классическая схема создания программы.
презентация [1,2 M], добавлен 19.02.2014Характеристика та класифікація регулярних виразів, їх сутність за теоріями автоматів та формальних мов, використання в електронній обробці текстів. Представлення символів за їх кодами. Скорочене позначення символьних класів, поняття квантифікації.
реферат [48,9 K], добавлен 09.06.2012Создание интерактивного интерпретатора для мелких вычислений стандартного "Калькулятора" Windows. Его реализация относительно несложного языка программирования, работающий в интерактивном режиме, то есть выполняющий вводимые команды с клавиатуры.
курсовая работа [287,3 K], добавлен 17.09.2008Выбор типовой архитектуры. Схема работы Shell-скрипта. Вывод информации на сайт. Обеспечение его безопасности. Внедрение проекта на сервер. Построение заключительного запроса. Оценка времени работы приложения. Настройка авторизации по открытому ключу.
курсовая работа [950,6 K], добавлен 22.03.2018Стандартизированный процедурный язык программирования. Создание системного программного обеспечения и прикладных программ. Особенности языка Си, его основные недостатки. Передача параметров в функцию по значению. Стандартная библиотека языка Си.
презентация [396,3 K], добавлен 12.11.2012Степень переносимости исходного кода между различными платформами. Первый язык программирования высокого уровня, имеющий транслятор. Программа Fortran, ее версии, отличия от других программ. Составление программ на языке программирования Fortran.
курсовая работа [45,5 K], добавлен 04.06.2014Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.
реферат [79,0 K], добавлен 23.06.2012Создание простого непроцедурного языка, которым может воспользоваться любой пользователь. Разработка языка запросов. Стандартный язык реляционных баз данных. Вопросы практического программирования. Фиксированный исполняемый код SQL и типы команд SQL.
доклад [1,9 M], добавлен 12.01.2011Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Основные сведения о языках программирования и их состав. Программа для компьютера. Использование компилятора и операторы. Языки программирования высокого уровня. Концепции объектно-ориентированного программирования. Языки искусственного интеллекта.
презентация [6,3 M], добавлен 14.08.2013Язык программирования Турбо Паскаль. Запись алгоритма на языке программирования и отладка программы. Правила записи арифметических выражений. Стандартное расширение имени файла, созданного системным редактором. Составной оператор и вложенные условия.
курсовая работа [75,0 K], добавлен 21.03.2013