45948 (665253), страница 2

Файл №665253 45948 (Программирование на Shell) 2 страница45948 (665253) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Конструкция "1>&2" - означает, что кроме номера стандартного файла, в который

перенаправить, необходимо впереди ставить "&"; вся конструкция пишется без

пробелов.

<- закрывает стандартный ввод.

>- закрывает стандартный вывод.

2.4. Командные файлы.

Для того, чтобы текстовый файл можно было использовать как команду, существует

несколько возможностей.

Пусть с помощью редактора создан файл с именем "cmd", содержащий одну строку

следующего вида:

date; pwd; ls

Можно вызвать shell как команду, обозначаемую "sh", и передать ей файл "cmd",

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

$ sh cmd

или

$ sh

В результате выполнения любой из этих команд будет выдана дата, затем имя

текущего каталога, а потом содержимое каталога.

Более интересный и удобный вариант работы с командным файлом - это превратить

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

кода защиты. Для этого надо разрешить выполнение этого файла.

Например,

chmod 711 cmd

сделает код защиты "rwx__x__x". Тогда простой вызов

cmd

приведет к выполнению тех же трех команд.

Результат будет тот же, если файл с содержимым

date; pwd; ls

представлен в виде:

date

pwd

ls

так как переход на другую строку также является разделителем в

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

Таким образом, выполняемыми файлами могут быть не только файлы, полученные в

результате компиляции и сборки, но и файлы, написанные на языке shell. Их

выполнение происходит в режиме интерпретации с помощью shell-интерпретатора

2.5 Отладка командных файлов

В SHELL используются два механизма отладки командных файлов.

Первый из них: set -v выводит строки командного файла по мере их чтения. Этот

режим применяется при поиске синтаксических ошибок. Для его использования не

требуется производить модификацию командного файла, например:

sh -v proc... здесь proc - имя командного файла. Ключ -v может использоваться

вместе с ключом -n, предотвращающим выполнение следующих за ним команд (команда

set -n блокирует терминал до тех пор, пока не вводится признак конца файла EOF).

Команда set -х выводит команды по мере их выполнения, причём на терминал

выводятся строки программы и на место переменных подставляются их значения. Для

отмены ключей -x и -v можно воспользоваться командой set - а для установки -

присвоить соответствующее значение макропеременной.

3. СРЕДА SHELL (ПЕРЕМЕННЫЕ И ПАРАМЕТРЫ)

На языке shell можно писать командные файлы и с помощью команды "chmod" делать

их выполняемыми. После этого они ни чем не отличаются от прочих команд ОС UNIX.

3.1. shell-переменные

Имя shell-переменной - это начинающаяся с буквы последовательность букв, цифр и

подчеркиваний.

Значение shell-переменной - строка символов.

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

стороны, позволяет легко вовлекать в программирование конечных пользователей,

никогда ранее программированием не занимавшихся, а с другой стороны, вызывает

некий внутренний протест у многих программистов, привыкших к существенно

большему разнообразию и большей гибкости языковых средств.

Однако интересно наблюдать то, как высококлассные программисты, освоившись с

"правилами игры" shell, пишут на нем программы вомного раз быстрее, чем на Си,

но, что особенно интересно, в ряде случаев эти программы работают даже быстрее,

чем реализованные на Си.

Имя переменной аналогично традиционному представлению об идентификаторе, т.е.

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

буквы или подчеркивания.

Для присваивания значений переменным может использоваться оператор присваивания

"=".

var_1=13 - "13" - это не число, а строка из двух цифр.

var_2="ОС UNIX" - здесь двойные кавычки (" ") необходимы, так как в строке есть

пробел.

Возможны и иные способы присваивания значений shell-переменным. Так например

запись,

DAT=`date`

приводит к тому, что сначала выполняется команда "date" (обратные кавычки

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

результат ее выполнения, вместо выдачи на стандартный выход, приписывается в

качестве значения переменной, в данном случае "DAT".

Можно присвоить значение переменной и с помощью команды "read", которая

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

режиме. Обычно команде "read" в командном файле предшествует команда "echo",

которая позволяет предварительно выдать какое-то сообщение на экран. Например:

echo -n "Введите трехзначное число:"

read x

При выполнении этого фрагмента командного файла, после вывода на экран сообщения

Введите трехзначное число:

интерпретатор остановится и будет ждать ввода значения с клавиатуры. Если вы

ввели, скажем, "753" то это и станет значением переменной "x".

Одна команда "read" может прочитать (присвоить) значения сразу для нескольких

переменных. Если переменных в "read" больше, чем их введено (через пробелы),

оставшимся присваивается пустая строка. Если передаваемых значений больше, чем

переменных в команде "read", то лишние игнорируются.

При обращении к shell-переменной необходимо перед именем ставить символ "$". Так

команды

echo $var_2

echo var_2

выдадут на экран

ОС UNIX

var_2

3.2. Экранирование

Рассмотрим более подробно приемы экранирования, используемые в shell. В качестве

средств экранирования используются двойные кавычки (" "), одинарные кавычки ('

') и бэк-слэш (\).

Из примеров очевидно их действие:

Можно в одной строке записывать несколько приcваиваний.

x=22 y=33 z=$x

A="$x" B='$x' C=\$x

D="$x + $y + $z" E='$x + $y + $z' F=$x\ +\ $y\ +\ $z

(присваивание G=$x+$y не было бы выполнено из-за пробелов)

Тогда

echo A = $A B = $B C = $C

echo D = $D E = $E F = $F

eval echo evaluated A = $A

eval echo evaluated B = $B

eval echo evaluated C = $C

Выдадут на экран

A = 22 B = $x C = $x

D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22

evaluated A = 22

evaluated B = 22

evaluated C = 22

Приведем еще примеры, связанные с экранированием перевода строки. Пусть

переменной "string" присвоено значение "массива" 2x3:

abc

def

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка

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

string="abc

def"

Тогда три варианта записи переменной в команде "echo"

echo $string

echo '$string'

echo "$string"

дадут соответственно три различных результата:

abc def

$string

abc

def

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

echo "str_1

str_2" > file_1

echo 'str_1

str_2' > file_2

cat file_1 file_2

даст выдаст последовательно одинаковые файлы file_1 и file_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.

set +v отменяет предыдущий режим.

set -x на терминал выводятся команды перед выполнением.

set +x отменяет предыдущий режим.

Команда "set="Times New Roman">" без параметров выводит на терминал состояние

программной среды.

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=/home/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}:" " - вид промтера. В данном случае в промптере будет выдаваться имя

Характеристики

Тип файла
Документ
Размер
128,72 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

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