Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Linux.doc
Скачиваний:
11
Добавлен:
07.11.2018
Размер:
176.64 Кб
Скачать

Текстовый редактор VI

Текстовый редактор vi (vim) - обязательный атрибут всех Unix подобных ОС, поэтому каждому пользователю Linux нужны хотя бы основные навыки работы в vi.

Запуск редактора:

а) vi myfile (одно или несколько имен файлов через пробелы для последовательного вызова их на редактирование).

Если такого файла нет, то появится начало пустого файла; курсор установится в начале первой строки.

б) vi + myfile

На экране конец файла; а курсор - в начале последней строки.

в) vi +10 myfile

На экране - часть файла и строка 10 - в центре экрана;

курсор - в начале этой строки.

Режимы работы.

Редактор работает в нескольких режимах:

  • В режиме вставки (редактирования),нажатие на клавишу приводит к вставке соответствующего символа в редактируемый текст.

  • В командномрежиме

    • нажатие на любую клавишу воспринимается как команда редактору, которая немедленно исполняется;

    • в этом режиме можно ввести команду с параметрами в командной строке.

Поэтому при работе с Vi пользователю всегда нужно обращать внимание на то, в каком режиме находится редактор.

Командный режим.

Редактор Vi всегда начинает работу в командномрежиме. В этом режиме есть два способа отдавать команды редактору.

  1. нажатие практически на любую клавишу редактор воспринимает как определенную команду. Команды не отображаются, а сразу выполняются. Переключиться из режима вставки в командный режим - при помощи Esc.

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

Режим вставки (редактирования).

Для перехода к этому режиму следует использовать команду insert, выполнение которой осуществляется при нажатии на клавишу "i" в командном режиме. При переключении в этот режим внизу экрана появляется надпись Insert, можно вносить изменения в текст документа.

Выход из vi

а) с сохранением изменений: переключиться в командный режим (Esc), ввести команду

: w q

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

: q !

Перемещение курсора

0 - в начало строки

$ - в конец строки

w - в начало слова

b - в начало предыдущего слова

Удаление

dw - удаление слова

d$ - удаление до конца строки

d0 - удаление до начала строки

d7w - удаление 7 слов

Изменение (замена)

c$ (или C) <текст замены (может быть из нескольких строк)> Esc - замена конца строки (от курсора);

c^ <текст замены> Esc - замена от начала строки до курсора

cc < текст > Esc - замена одной строки;

5cc < текст > Esc - замена пяти строк.

Создание новой строки

о - пустая строка после текущей строки;

O - пустая строка перед текущей строкой.

Использование буфера обмена

Занести в буфер:

yw - сохранить слово (курсор - в начале слова);

yy - сохранить одну строку ;

5yy - сохранить 5 строк; и т.п.

При выполнении команд ndd (где n - число) удаляемые n строк заносятся в буфер.

Вставка текста из буфера:

- p - после текущей строки;

- P - перед ней.

Задание

Создайте текстовый файл, который будет содержать ваши данные.

ПЗ 7-8. Примеры программирования в командном интерпретаторе shell

Командный интерпретатор является языком программирования, в котором операторами служат все утилиты системы. Поскольку все командные интерпретаторы совместимы с shell - самым первым интерпретатором команд, то написанные на языке shell командные файлы будут выполняться в любом другом интерпретаторе команд.

Переменные shell

Присваивание значения переменной

В языке Shell определение переменной состоит из имени и значения: var=value (без пробелов). Для доступа к переменной необходимо перед именем поставить знак $.

var=OS (определение)

echo $var (доступ)

OS (результат echo)

или

Name="Петров Василий"

echo $Name

Петров Василий

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

Пусть a=/usr/share/doc/HTML/

тогда

cat ${a}index.html

равносильно команде:

cat /usr/share/doc/HTML/index.html

Переменная может быть выводом команды:

now=`date` (`` - обратные кавычки)

echo $now (выдаст результат команды date).

Ввод данных с клавиатуры

Ввод данных осуществляется с помощью команды read, которая считывает строку из стандартного потока ввода и сохраняет ее в переменной.

echo "Как вас зовут? "

read n

echo "Здравствуйте, $n"

Параметры командного файла

При запуске командного файла, можно передать разные значения (параметры) после имени файла. Эти параметры используются в качестве переменных в командах, что позволяет создавать командные файлы общего назначения, и использовать их с разными параметрами, в зависимости от поставленной задачи. В командном файле соответствующие параметрам переменные (аналогично shell-переменным) обозначаются символом "$", а далее следует одна из цифр от 0 до 9. $0 - соответствует имени данного командного файла; $1 - первый по порядку параметр; $2 - второй параметр и т.д.

Пусть в командном файле с именем "hello" записаны следующие команды:

#! /bin/sh

echo выполнение командного файла $0:

echo «Как Вас зовут? Завершение: ctrl+d»

cat >> $1

cat $1

cat $2

а файлы "file1" и "file2" содержат соответственно следующие строки

file1: Дорогой

file2: Поздравляем Вас с успешной работой в ОС LINUX!!

Создайте файлы hello, file1, file2.

Выполните команду: hello file1 file2.

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

Переделайте этот файл так, чтобы имя файла и каталог для поиска запрашивались у пользователя (используйте команду read).

Оператор цикла for

for <переменная> in <список значений>

do

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

done

Ключевые слова for, do, done пишутся с начала строки.

Пусть имеется три файла: gr1gr2gr3, в каждом из которых хранится список студентов данной группы в не отсортированном виде. Нужно создать сводный список студентов по группам в файле studlist.

Следующий командный файл обращается по порядку к каждому из файлов gr1gr2gr3, сортирует список соответствующей группы, хранящийся в файле, и добавляет в файл studlist.

Командный файл addlist:

#! /bin/sh

echo "списки групп:" | cat > studlist ( в файл studlist записываем строку-заголовок)

for f in gr* (или for f in gr1 gr2 gr3) (переменная f последовательно принимает значения gr1, gr2, gr3)

do

echo "группа $f" | cat>> studlist

sort $f | cat>> studlist

done

Создайте файлы gr1, gr2, gr3, в каждый из которых поместите список из 3-4 фамилий (не в алфавитном порядке). Создайте командный файл addlist, выполните его. Просмотрите полученный файл studlist.

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

Командный файл make3dir:

#! /bin/sh

cd ~

for i in $1 $2 $3

do

mkdir $i

cd $i

done

Допустим, что командный файл был запущен следующей командой: make3dir d1 d2 d3, т.е. значение первого параметра $1 - d1, второго параметра $2 - d2, третьего параметра $3 - d3. Переменная i сначала принимает значение первого параметра $1, т.е. i=d1. Поэтому в текущем каталоге создается каталог, имя которого совпадает с i, т.е. каталог d1. Затем этот каталог становится текущим. Далее i принимает значение d2, создается каталог d2 в текущем каталоге (в d1), созданный каталог d2 становится текущим. Далее все повторяется для i=d3.

Создайте командный файл make3dir. Запустите его с параметрами d1 d2 d3. Проверьте создались ли вложенные каталоги (d1 - d2 - d3) в вашем домашнем каталоге?

Задание: Создайте командный файл, который в каталоге d1 создавал бы 2 текстовых файла, имена которых пользователь вводил бы через параметры команды.

Создайте командный файл make3file, который создавал бы в каждом из каталогов d1, d2, d3 текстовые файлы соответственно text1, text2, text3. Имена файлов передаются через параметры командного файла.

Часто используется форма "for i in *", означающая - для всех файлов текущего каталога. Рассмотрим пример:

Командный файл renall:

#! /bin/sh

echo Укажите полное имя каталога

read k

cd $k

for i in *

do

mv $i stud$i(переименовать все файлы и каталоги в текущем каталоге - добавить stud в начало каждого имени).

done

В этом примере используется команда read для ввода значения переменной k пользователем с клавиатуры. Текущим становится каталог, имя которого было введено пользователем и записано в переменную k. Переменная i последовательно пробегает все файлы и каталоги текущего каталога, т.е. значения переменной iпоследовательно соответствуют именам файлов или каталогов, расположенного в каталоге, имя которого передается с помощью параметра (cd $1 - делает текущим указанный каталог).

Создайте командный файл renall, запустите его с параметром d1.

Задание: Напишите командный файл, который будет осуществлять поиск слова, введенного пользователем, во всех файлах текущего каталога. Для поиска используйте команду grep (см. help по этой команде).

Команда test [ ]

Команда test проверяет выполнение некоторого условия. С использованием этой (встроенной) команды формируются операторы выбора и цикла языка shell.

Есть два возможных формата команды:

test условие

или

[ условие ]

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

Условия проверки файлов:

-f имя- файл имя является обычным (регулярным)файлом;

-d имя - файл имя - каталог;

-L имя - файл имя - символьная ссылка;

-r имя - имеется разрешение на чтение файла имя;

-w имя - имеется разрешение на запись в файл имя;

-x имя - имеет разрешение на выполнение файла имя;

-s имя - файл имя не пустой.

Условия проверки строк:

str1 = str2 - строки "str1" и "str2" совпадают;

str1 != str2 - строки "str1" и "str2" не совпадают;

-n str1 - строка "str1" существует (непустая);

-z str1 - строка "str1" не существует (пустая, имеет нулевую длину).

Условия сравнения целых чисел:

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.

Объединение и отрицание при проверке:

t1 -a t2 - логическое И

t1 -o t2 - логическое ИЛИ

! t1 - отрицание

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

Этот оператор осуществляет выбор между альтернативными действиями.

Простейшая форма - if then:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]