Начальные навыки работы в командном интерпретаторе shell
Среда shell (переменные и параметры). Анализ приемов и средств экранирования, используемых в shell. Манипуляции с shell-переменными. Передача параметров в командный файл. Подстановки shell-интерпретатора. Символ при обращении к shell-переменной.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 27.11.2013 |
Размер файла | 3,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Тема
Начальные навыки работы в командном интерпретаторе shell
Содержание занятия
- 1. Теоретическая часть
- Среда shell (переменные и параметры)
- Экранирование
- Манипуляции с shell-переменными
- Параметры
- Подстановки shell-интерпретатора
- Программная среда
- Практическая часть
- 2. Методические указания к выполнению лабораторной работы
- Контрольные вопросы
1. Теоретическая часть
Среда shell (переменные и параметры)
Цель работы: знакомство с shell - переменными, получение начальных навыков работы с shell - переменными.
На языке shell можно писать командные файлы и с помощью команды "chmod" делать их выполняемыми. После этого они ни чем не отличаются от прочих команд ОС UNIX.
shell-переменные
Имя shell-переменной - это начинающаяся с буквы последовательность букв, цифр и подчеркиваний.
Значение shell-переменной - строка символов.
То, что в shell всего два типа данных: строка символов и текстовый файл, с одной стороны, позволяет легко вовлекать в программирование конечных пользователей, никогда ранее программированием не занимавшихся, а с другой стороны, вызывает некий внутренний протест у многих программистов, привыкших к существенно большему разнообразию и большей гибкости языковых средств.
Однако интересно наблюдать то, как высококлассные программисты, освоившись с "правилами игры" shell, пишут на нем программы во много раз быстрее, чем на Си, но, что особенно интересно, в ряде случаев эти программы работают даже быстрее, чем реализованные на Си. (Но это уже случаи "высшего пилотажа").
Имя переменной аналогично традиционному представлению об идентификаторе, т.е. именем может быть последовательность букв, цифр и подчеркиваний, начинающаяся с буквы или подчеркивания.
Для присваивания значений переменным может использоваться оператор присваивания "=".
var_1=13 - "13" - это не число, а строка из двух цифр. var_2="ОС UNIX" - здесь двойные кавычки (" ") необходимы, так как в строке есть пробел.
ВАЖНО: Обратим внимание на то, что, как переменная, так и ее значение должны быть записаны без пробелов относительно символа "=". Кстати, как видно из примеров, первым словом в командной строке может стоять не только имя команды, но и присваивание значения переменной. Об этом как раз и говорит наличие в беспробельной строке символов наличие (незаэкранированного) символа "=".
Возможны и иные способы присваивания значений shell-переменным. Так например запись,
DAT=`date` приводит к тому, что сначала выполняется команда "date" (обратные кавычки говорят о том, что сначала должна быть выполнена заключенная в них команда), а результат ее выполнения, вместо выдачи на стандартный выход, приписывается в качестве значения переменной, в данном случае "DAT".
При обращении к shell-переменной необходимо перед именем ставить символ "$". Так команды
echo $var_2 echo var_2
выдадут на экран
ОС UNIX var_2
И еще один пример. Фрагмент командного файла:
echo "var_2 = $var_2"
выдаст на экран
var_2 = ОС UNIX
В команде "echo" первое использование "var_2" - это просто текст, а второе ("$var_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
ВНИМАНИЕ. В трех последних случаях использована своеобразная команда "eval" (от evaluate - означивать), которая в подставленной в нее (в качестве аргумента) команде выполняет означивание переменных (если таковые имеются). В результате значение "A" остается прежним, поскольку "A" имеет значение "22". А переменные "B" и "C" имеют значение "$x". За счет означивания, которое было выполнено командой "eval" - evaluated "B" и "C" дают значения "22".
Еще один пример на "eval".
Пусть
w=\$v v=\$u u=5
В результате выполнения команд
echo $w
eval echo $w
eval eval echo $w
на экран будет выведено
$v
$u
5
Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной "string" присвоено значение "массива" 2x3:
abc
def
Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки:
string="abc def"
Тогда три варианта записи переменной в команде "echo"
echo $string echo '$string' echo "$string"
дадут соответственно три различных результата:
abc def $string abc
def
Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя - \\), но в командном файле бэк-слэш позволяет об'единять строки в одну (экранировать конец строки).
Например, приводившийся ранее пример командной строки: cat f1 | grep - h result | sort | cat - b > f2
может быть записан в командном файле, скажем, как
cat f1 | grep - h \
result | sort | cat - b > f2
Кстати, эффект продолжения командной строки обеспечивает и символ конвейера. В данном случае это может дать более симпатичный результат, например:
cat f1 | grep - h result | sort|
cat - b > f2
Обратные кавычки позволяют присваивать переменным данные вывода системных команд. Символы, заключённые в обратные кавычки воспринимаются интерпретатором shell как системная команда, которую следует выполнить. С помощью этого метода можно осуществить подстановку данных вывода в переменную.
Пример:
$ echo 'date'
San Mon 16 16: 40: 19 GMT 1999
Манипуляции с shell-переменными
Если переменные, скажем "х", "y", "z", не определены, то при обращении к переменным
${x-new}в качестве значения "x" будет выдано "new",
${y=new}в качестве значения "у" будет присвоено "new",
${z? new}в качестве значения "z" будет выдано "z: new" и
соответствующая процедура прекращается.
Во всех этих случаях, если переменная была к этому времени определена, то ее значение используется обычным образом.
А в следующем случае наоборот, пусть переменная "v" имеет какое-то значение, тогда
${z+new} в качестве значения "z" будет выдано "new", а если не было присвоено значение, то пустая строка.
Параметры
В командный файл могут быть переданы параметры. В shell используются позиционные параметры (т.е. существенна очередность их следования). В командном файле соответствующие параметрам переменные (аналогично shell-переменным) начинаются с символа "$", а далее следует одна из цифр от 0 до 9:
Пусть расчет "examp-1" вызывается с параметрами "cock" и "tail". Эти параметры попадают в новую среду под стандартными именами "1" и "2". В (стандартной) переменной с именем "0" будет храниться имя вызванного расчета.
При обращении к параметрам перед цифрой ставится символ доллара "$" (как и при обращении к переменным):
$0 соответствует имени данного командного файла;
$1 первый по порядку параметр;
$2 второй параметр и т.д.
Пусть командный файл с именем "examp-1" имеет вид
echo Это расчет $0:
sort $2 >> $1
cat $1
а файлы "cock" и "tail" содержат соответственно cock:
Это отсортированный файл:
tail:
1
2
3
Тогда после вызова команды examp-1 cock tail на экране будет
Это расчет examp-1:
Это отсортированный файл:
1
2
3
Поскольку число переменных, в которые могут передаваться параметры, ограничено одной цифрой, т.е.9-ю ("0", как уже отмечалось имеет особый смысл), то для передачи большего числа параметров используется специальная команда "shift".
Рассмотрим ее действие на примере.
Пусть командный файл "many" вызывается с 13-ю параметрами many 10 20 30 40 50 60 70 80 90 100 110 120 130
И имеет вид
###
# many: Передача большого числа параметров.
echo "$0: Много параметров"
echo " Общее число параметров = $#
Исходное состояние: $1 $5 $9 "
shift
echo "1 сдвиг: первый=$1 пятый=$5 девятый=$9"
shift 2
echo "1 + 2 = 3 сдвига: первый=$1 пятый=$5 девятый=$9"
perem=`expr $1 + $2 + $3`
echo $perem
В результате первого применения команды "shift" второй параметр расчета вызывается как $1, третий параметр вызывается как $2,. десятый параметр, который был исходно недоступен, вызывается как $9. Но стал недоступным первый параметр!
После выполнения этого расчета на экране будет:
many: Много параметров
Общее число параметров = 13
Исходное состояние: 10 50 90
1 сдвиг: первый=20 пятый=60 девятый=100
1 + 2 = 3 сдвиг: первый=40 пятый=80 девятый=120
Своеобразный подход к параметрам дает команда "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отменяет предыдущий режим.
Подстановки shell-интерпретатора
Перед началом непосредственной интерпретации и выполнением команд, содержащихся в командных файлах, shell выполняет различные виды подстановок:
1. ПОДСТАНОВКА РЕЗУЛЬТАТОВ. Выполняются все команды, заключенные в обратные кавычки, и на их место подставляется результат.
2. ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ И ПЕРЕМЕННЫХ. То есть слова, начинающиеся на "$", заменяются соответствующими значениями переменных и параметров.
3. ИНТЕРПРЕТАЦИЯ ПРОБЕЛОВ. Заэкранированные пробелы игнорируются.
4. ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ. Проверяются слова на наличие в них спецсимволов ("*", "?"," [] ") и выполняются соответствующие генерации.
Программная среда
Каждый процесс имеет среду, в которой он выполняется. Shell использует ряд переменных этой среды.
Если вы наберете команду "set" без параметров, то на экран будет выдана информация о ряде стандартных переменных, созданных при входе в систему (и передаваемых далее всем вашим новым процессам "по наследству"), а также переменных, созданных и экспортируемых вашими процессами.
Конкретный вид и содержание выдаваемой информации в немалой степени зависит от того, какая версия UNIX используется и как инсталлирована система.
ВАЖНОЕ ЗАМЕЧАНИЕ. Один из способов просто изменит среду (например, тропу поиска команд, вид промтера, вид оболочки, цвет экрана и т.п.) можно, разместив эту информацию в своем домашнем директории в специализированном файле". profile" (${HOME}/. profile), присвоив нужные значения переменным среды. То есть вызвать это файл в редактор и написать, что пожелаете). Тогда при каждом вашем входе в систему этот файл будет автоматически выполняться и устанавливать новую среду. Этот файл должен ОБЯЗАТЕЛЬНО размещаться в вашем ДОМАШНЕМ директории (директории входа).
Если вы внесли изменения в". profile", то для переноса этих изменений в среду необходимо выполнить этот файл. Для этого можно выйти и заново войти в систему, а можно воспользоваться (специально для этого случая созданной) командой"." без выхода из системы, т.е.
. profile
Сам интерпретатор shell автоматически присваивает значения следующим переменным (параметрам):
? значение, возвращенное последней командой;
$номер процесса;
! номер фонового процесса;
#число позиционных параметров, передаваемых в shell;
*перечень параметров, как одна строка;
@перечень параметров, как совокупность слов;
флаги, передаваемые в shell.
При обращении к этим переменным (т. е при использовании их в командном файле - shell-программе) следует впереди ставить "$".
Важную роль при создании уникальных файлов играет специальная переменная "$$", значение которой соответствует номеру процесса, выполняющего данный расчет. Каждый новый расчет, выполняемый компьютером, инициирует один или несколько процессов, автоматически получающих номера по порядку. Поэтому, используя номер процесса в качестве имени файла, можно быть уверенным, что каждый новый файл будет иметь новое имя (не запишется на место уже существующего). Достоинство является и главным недостатком такого способа именования файлов. Неизвестно, какие имена будут присвоены файлам. И, если в рамках данного процесса можно найти файл "не глядя", т.е., обратившись к нему, используя $$, то потом такие файлы можно легко потерять. Это создает дополнительные проблемы при отладке программ.
Практическая часть
Задание на лабораторную работу:
1. Имеется некоторая переменная a, присвоить этой переменной в качестве значения результат выполнения команды ls; присвоить этой переменной некоторую символьную строку или число; присвоить этой переменной несколько символьных строк, разделённых пробелами. Вывести на экран с помощью команды echo символы $a, саму переменную a, её значения для разных случаев присвоения.
2. Реализовать программу, которая находит результат суммы квадратов двух чисел, записывает этот результат в некий файл, после чего производится вывод на экран содержимого данного файла. (Реализовать программу 2 способами: 1-ый способ - с передачей вводимых чисел в командный файл в качестве параметров; 2-ой способ - с использованием команды read для считывания вводимых чисел)
Методические указания к выполнению лабораторной работы
1. Для экранирования специальных символов ($, * и т.д.) используются косая черта (\), одинарные кавычки (' ').
Например, имеется некоторая переменная var, этой переменной мы присваиваем символы $a. В этом случае символ $ должен быть экранирован.
Также необходимо использовать одинарные кавычки в случае, если мы хотим вывести на экран строку "$var", содержащую спецсимвол $.
2. При передаче в переменную результата выполнения некоторой команды необходимо использовать обратные кавычки (` `).
Например, имеется переменная var1, требуется передать в эту переменную результат выполнения команды date. Для этого необходимо использовать обратные кавычки. Если этого не сделать, команда будет воспринята интерпретатором всего лишь как набор символов.
3. В случае если мы присваиваем некоторой переменной несколько символьных строк, разделенных пробелами, необходимо использовать двойные кавычки, иначе произойдет ошибка. Например, имеем некоторую переменную var2, которой необходимо присвоить строку "Это строка".
4. В командный файл могут быть переданы параметры, а соответствующие этим параметрам переменные начинаются с символа $, за которым следует номер параметра. Параметру $0 соответствует имя командного файла.
Рассмотрим передачу параметров в командный файл на примере команды expr, которая производит вычисления с целыми числами. Команда имеет вид: expr аргумент оператор аргумент.
Пусть необходимо реализовать программу умножения двух чисел с использованием команды expr. Реализуем программу 2 способами: 1-ый способ - передача чисел в командный файл в качестве параметров; 2-ой способ - использование команды read, считывающей вводимые числа.
1-ый способ: создаём и выполняем командный файл с передачей параметров. При передаче параметров в файл необходимо отделять их друг от друга пробелами.
переменная символ экранирование файл
2-ой способ: при выполнении командного файла, происходит запрос чисел с их последующим считыванием с помощью команды read.
Контрольные вопросы
1. Какие типы данных существуют в shell? Какой символ используется при обращении к shell переменной?
2. Какие средства экранирования существуют в shell? В каком случае используется каждое из этих средств? Какое средство экранирования необходимо использовать для присваивания переменной строки символов?
3. Каким образом обозначаются в командном файле переменные, соответствующие передаваемым в файл параметрам? Чему соответствует в командном файле обозначение $0?
4. Можно ли передать в командный файл больше 10 параметров? Какая команда при этом должна использоваться?
5. Для чего нужна команда set?
6. Какие подстановки выполняет shell перед началом выполнения команд?
7. Каким переменным shell автоматически присваивает значения? Какие это значения?
Размещено на 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Характеристика та класифікація регулярних виразів, їх сутність за теоріями автоматів та формальних мов, використання в електронній обробці текстів. Представлення символів за їх кодами. Скорочене позначення символьних класів, поняття квантифікації.
реферат [48,9 K], добавлен 09.06.2012Создание программы для среды UNIX, проверяющей атрибут выполнения файла для текущего пользователя. Особенности прав доступа для каталогов. Командный интерпретатор shell; общий синтаксис скрипта. Установка атрибутов защиты для групп пользователей.
курсовая работа [18,8 K], добавлен 12.05.2013Выбор типовой архитектуры. Схема работы Shell-скрипта. Вывод информации на сайт. Обеспечение его безопасности. Внедрение проекта на сервер. Построение заключительного запроса. Оценка времени работы приложения. Настройка авторизации по открытому ключу.
курсовая работа [950,6 K], добавлен 22.03.2018Общая характеристика угроз безопасности информационной системы учебного назначения. Организация использования средств межсетевого экранирования в лаборатории. Анализ роли и места средств межсетевого экранирования в СЗИ. Система защиты лаборатории "ПАЗИ".
дипломная работа [1,6 M], добавлен 02.06.2011Разработка программы-интерпретатора, способной получать на входе текстовый файл (в формате ASCII или ANSI) с текстом программы и на выходе выводить на экран результаты вычислений, определяемых программистом. Выбор лексем, интерфейс и листинг программы.
курсовая работа [132,0 K], добавлен 12.03.2013Синтаксис языка РНР, его переменные и чувствительность их имен к регистру. Гибкость в отношении типов переменных, преобразование типов. Набор основных типов данных при работе с переменными. Методы передача переменных скрипту. Операторы цикла и выбора.
дипломная работа [27,3 K], добавлен 15.04.2009Функциональный язык программирования. Широкие возможности для работы с файлами. Понятие потока, с которым связан файл символ. Поток - абстрактный объект, с которым можно работать, не углубляясь в аппаратную и программную реализацию работы с данными.
доклад [10,2 K], добавлен 22.09.2008Настройка параметров для работы Word. Характеристика меню Word: панели инструментов, структура окон, выбор вида. Основы работы с документами. Сохранение файла на диске, набор текста, форматирование абзаца и разделов. Параметры табуляции, колонок, таблиц.
контрольная работа [4,0 M], добавлен 09.01.2011Задачи, выполняемые администраторами ИС ФНС РФ по обеспечению сетевой безопасности ОС UNIX. Требования к системе разработки симулятора. Блок распознавания введенной переменной. Реализация симулятора при помощи Adobe Captivate. Запись ошибки в лог-файл.
курсовая работа [1,0 M], добавлен 01.05.2011Инфологическая и даталогическая модели данных. Описание пользовательской части и используемых sql-запросов. Физическая и логическая модель web-приложения. Описание используемых программных средств, языка программирования и информационных технологий.
курсовая работа [1,3 M], добавлен 29.04.2015Запуск оболочки командный интерпретатора и выход из нее. Справочная система среды PowerShеll. Список доступных математических функций. Использование специальных команд консольных сред – командлет ОС: dir, ls и псевдонимов copy, erase, history, cat.
лабораторная работа [1,3 M], добавлен 23.03.2015Общая характеристика используемых типов параметров дерева реестра в разных версиях Windows. Сравнение способов хранения реестров Windows. Анализ взаимосвязи между кустами реестра и соответствующими им файлами. Понятие, сущность и значение reg-файла.
реферат [420,2 K], добавлен 04.10.2010Спецификатор класса памяти в объявлении переменной, ее область действия как часть программы или исходного модуля. Определение видимости переменных и функций в программе. Продолжительность жизни, виды моделей памяти. Передача параметров и массивов.
лабораторная работа [62,2 K], добавлен 06.07.2009Файл - именованная область памяти на магнитном носителе. Программирование доступа к файлу в языке Turbo Pascal. Описание файловой переменной. Виды файлов в зависимости от способа описания: текстовые, двоичные или типизированные и нетипизированные.
реферат [14,8 K], добавлен 19.01.2009Основы синтаксиса, переменные, константы. Оператор if и switch. Цикл с предусловием while и постусловием do-while. Операторы передачи управления и включения. Формы в HTML-документах. Обработка запросов с помощью РНР. Передача параметров по ссылке.
методичка [44,2 K], добавлен 29.10.2013Язык программирования Java, история и предпосылки его создания. Переменные, именованные константы, массивы, перечисления. Интерфейсы и обратные вызовы в Java. Удаленный вызов процедуры: общие сведения. Передача параметров при удаленном вызове процедур.
курс лекций [526,7 K], добавлен 24.06.2009Теоретическое изучение и практическое применение приёмов работы с файлами в операционной системе Windows 95. Файлы и папки: основные понятия и правила формирования имен файлов в Windows. Характеристика и анализ особенностей операций с файлами и папками.
контрольная работа [139,9 K], добавлен 09.03.2011Общее понятие термина "файл". Имя файла и его расширение. Типы и параметры файлов, их значение. Понятие "файловая система" и "файловая структура диска". Построение дерева каталогов. Особенности имени файла в операционной системе MS-DOS и Windows.
презентация [2,7 M], добавлен 18.10.2010