русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Многооконное редактирование


Дата добавления: 2014-11-27; просмотров: 588; Нарушение авторских прав


Редактировать сразу несколько файлов можно либо пользуясь командной редактора :e filename, либо указав все необходимые файлы в командной строке при вызове редактора (например: vi file1 file2 file3). В последнем случае вы двигаетесь по списку файлов с помощью команд:

:n - переходим к следующему файлу в списке

:rew - возвращаемся к редактированию первого файла в списке

Именованные буферы сохраняют свое содержимое при переходе к редактированию другого файла.

 

Простая команда - это последовательность слов, разделенная пробелами. Первое слово является именем команды, которая будет выполняться, а остальные будут переданы ей как аргументы. Имя команды передается ей как аргумент номер 0 (т.е. имя команды 3. Управляющие конструкции

является значением $0). Значение, возвращаемое простой командой - это ее статус завершения, если она завершилась нормально, или (восьмеричное) 200+статус, если она завершилась аварийно.

 

Список - это последовательность одного или нескольких конвейеров, разделенных символами ;, &, && или || и быть может заканчивающаяся символом ; или &. Из четырех указанных операций ; и & имеют равные приоритеты, меньшие, чем у && и ||. Приоритеты последних также равны между собой. Символ ; означает, что конвейеры будут выполняться последовательно, а & - параллельно. Операция && (||) означает, что список, следующий за ней будет выполняться лишь в том случае, если код завершения предыдущего конвейера нулевой (ненулевой).

 

Команда - это либо простая команда, либо одна из управляющих конструкций. Кодом завершения команды является код завершения ее последней простой команды.

 

3.1. Цикл ДЛЯ

 

for <переменная> [ in <набор> ]

 

do

 

<список>



 

done

 

 

Если часть in <набор> опущена, то это означает in "$@" ( то есть in $1 $2 ... $n). Пример. Вывести на экран все фортранные файлы текущей библиотеки:

 

 

for f in *.for

 

do

 

cat $f

 

done

 

 

3.2. Оператор выбора

 

case $<переменная> in

 

<шаблон> | <шаблон>... ) <список> ;;

 

. . .

 

esac

 

 

Оператор выбора выполняет <список>, соответствующий первому <шаблону>, которому удовлетворяет <переменная>. Форма шаблона та же, что и используемая для генерации имен файлов. Часть | шаблон... может отсутствовать.

 

Пример. Определить флаги и откомпилировать все указанные файлы.

 

 

# инициализировать флаг

 

flag=

 

# повторять для каждого аргумента

 

for a

 

do

 

case $a in

 

# об(r)единить флаги, разделив их пробелами

 

-[ocSO]) flag=$flag' ' $a ;;

 

-*) echo 'unknown flag $a' ;;

 

# компилировать каждый исходный файл и сбросить флаги

 

*.c) cc $flag $a; flag= ;;

 

*.s) as $flag $a; flag= ;;

 

*.f) f77 $flag $a; flag= ;;

 

# неверный аргумент

 

*) echo 'unexpected argument $a' ;;

 

esac

 

done

 

 

3.3. Условный оператор.

 

if <список1>

 

then

 

<список2>

 

[ elif <список3>

 

then

 

<список4> ]

 

. . .

 

[ else

 

<список5> ]

 

fi

 

 

Выполняется <список1> и, если код его завершения 0, то выполняется <список2>, иначе - <список3> и, если и его код завершения 0, то выполняется <список4>. Если же это не так, то выполняется <список5>. Части elif и else могут отсутствовать.

 

3.4. Цикл ПОКА

 

while <список1>

 

do

 

<список2>

 

done

 

 

До тех пор, пока код завершения последней команды <списка1> есть 0, выполняются команды <списка2>. При замене служебного слова while на until условие выхода из цикла меняется на противоположное.

 

В качестве одной из команд <списка1> может быть команда true (false). По этой команде не выполняется никаких действий, а код завершения устанавливается 0 (-1). Эти команды применяются для организации бесконечных циклов. Выход из такого цикла можно осуществить лишь по команде break (см. Специальные команды).

 

3.5. Функции

 

<имя> () {

 

<список>;

 

}

 

 

Определяется функция с именем <имя>. Тело функции - <список>, заключенный между { и }.

 

3.6. Зарезервированные слова

Следующие слова являются зарезервированными:

 

 

if then else elif fi

 

case in esac { }

 

for while until do done

 

 

3.7. Специальные команды

Как правило, для выполнения каждой команды 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 вычисляет условные выражения (см. Дополнительные сведения. 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.

 

5.2. Функции в shell

Функция позволяет подготовить список команд shell для последующего выполнения.

Описание функции имеет вид:

 

имя()

 

{

 

список команд

 

}

 

после чего обращение к функции происходит по имени. При выполнении функции не создается нового процесса. Она выполняется в среде соответствующего процесса. Аргументы функции становятся ее позиционными параметрами; имя функции - ее нулевой параметр. Прервать выполнение функции можно оператором "return [n]", где (необязательное) "n" - код возврата.

Пример. Вызов на выполнение файла "fun"

 

echo $$

 

fn() # описание функции

 

{

 

echo xx=$xx

 

echo $#

 

echo $0: $$ $1 $2

 

xx=yy ; echo xx=$xx

 

return 5

 

}

 

xx=xx ; echo xx=$xx

 

fn a b # вызов функции "fn" с параметрами

 

echo $?

 

echo xx=$xx

 

содержащего описание и вызов функции "fn", выдаст на экран:

 

 

xx=xx

 

xx=xx

 

 

fun: 749 a b

 

xx=yy

 

 

xx=yy

 

 

5.9. Обработка прерываний ("trap")

Бывает необходимо защитить выполнение программы от прерывания.

Наиболее часто приходится встречаться со следующими прерываниями, соответствующими сигналам:

выход из интерпретатора,
отбой (отключение удаленного абонента),
прерывание от <Del>,
уничтожение (не перехватывается),
окончание выполнения.

Для защиты от прерываний существует команда "trap", имеющая формат:

 

trap 'список команд' сигналы

 

Если в системе возникнут прерывания, чьи сигналы перечислены через пробел в "сигналы", то будет выполнен "список команд", после чего (если в списке команд не была выполнена команда "exit") управление вернется в точку прерывания и продолжится выполнение командного файла.

Например, если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в "/tmp", то это может быть выполнено командой "trap":

 

tarp 'rm /tmp/* ; exit 1' 1 2 15

 

которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлен выход "exit" из командного файла.

Команда "trap" позволяет и просто игнорировать прерывания, если "список команд" пустой. Так например, если команда "cmd" выполняется очень долго, а пользователь решил отключиться от системы, то для продолжения выполнения этой команды можно написать, запустив команду в фоновом режиме:

 

( trap '' 1; cmd )&

 

 

Порядок выполнения работы:

1. проверить режим ввода текста в VI, vв файлах б созданных м 1 л.р. осуществить операции редактирования текста

2. в командном режиме в файле удалить все символы кратные трем

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

4. в режиме ввода текста, сгенерировать скрипт который бы выводил на экран только отредактированные слова

5. Написать функцию, которая бы осуществляла слияние 2 и 3 строки файла

6. Удалить первые символы сразу из 3-х файлов

7. написать скрипт, затем оформив его функцией, которая бы стирала 5 символов справа от курсора

8. Все стертые элементы автомавтически заносить в буфер стирания

9. занести результаты в поименованный и неименнованый буферы

10. написать программу обработки прерывания по CTRL D которая бы прерывала программу с выводом на экран сообщения: “программа приостановлена”

11. Оформить программу прерывания функцией

12. Написать программу обработки прерывания, если размер редактируемого файла превышает 100к

 

 



<== предыдущая лекция | следующая лекция ==>
Повторители | Моделирование комбинационных устройств


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.125 сек.