
- •1. Просмотр каталога (list): ls -ключи путь/имя_файла
- •Примеры:
- •Изменение прав доступа к файлу
- •Смена владельца (change owner): chown имя_пользователя имена_файлов смена группы (change group): chgrp имя_группы имена_файлов
- •Создание жестких и символьных ссылок
- •Создание жесткой ссылки: ln имя_файла имя_ссылки
- •Создание символьной ссылки:
- •Ввод и вывод. Перенаправление ввода и вывода
- •Работа с текстом в файлах
- •Поиск строк в файле, соответствующих регулярному выражению: grep -ключи шаблон файлы
- •Сортировка строк текста : sort -ключи имена_файлов
- •Выделение колонки текста: cut -ключи имена_файлов
- •Замена символов в строках: tr набор_символов1 набор_символов2
- •Конвейеры
- •Текстовый редактор VI
- •Запуск редактора:
- •Командный режим.
- •If условие
- •If условие
- •Выполнение арифметических операций: команда expr
- •127 (Результат)
- •Задания:
Текстовый редактор VI
Текстовый редактор vi (vim) - обязательный атрибут всех Unix подобных ОС, поэтому каждому пользователю Linux нужны хотя бы основные навыки работы в vi.
Запуск редактора:
а) vi myfile (одно или несколько имен файлов через пробелы для последовательного вызова их на редактирование).
Если такого файла нет, то появится начало пустого файла; курсор установится в начале первой строки.
б) vi + myfile
На экране конец файла; а курсор - в начале последней строки.
в) vi +10 myfile
На экране - часть файла и строка 10 - в центре экрана;
курсор - в начале этой строки.
Режимы работы.
Редактор работает в нескольких режимах:
-
В режиме вставки (редактирования),нажатие на клавишу приводит к вставке соответствующего символа в редактируемый текст.
-
В командномрежиме
-
нажатие на любую клавишу воспринимается как команда редактору, которая немедленно исполняется;
-
в этом режиме можно ввести команду с параметрами в командной строке.
-
Поэтому при работе с Vi пользователю всегда нужно обращать внимание на то, в каком режиме находится редактор.
Командный режим.
Редактор Vi всегда начинает работу в командномрежиме. В этом режиме есть два способа отдавать команды редактору.
-
нажатие практически на любую клавишу редактор воспринимает как определенную команду. Команды не отображаются, а сразу выполняются. Переключиться из режима вставки в командный режим - при помощи Esc.
-
для ввода более сложных многословных команд используется командная строка, вызов которой осуществляется нажатием клавиши ":" .
Режим вставки (редактирования).
Для перехода к этому режиму следует использовать команду 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 пишутся с начала строки.
Пусть имеется три файла: gr1, gr2, gr3, в каждом из которых хранится список студентов данной группы в не отсортированном виде. Нужно создать сводный список студентов по группам в файле studlist.
Следующий командный файл обращается по порядку к каждому из файлов gr1, gr2, gr3, сортирует список соответствующей группы, хранящийся в файле, и добавляет в файл 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: