Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
63
Добавлен:
20.04.2015
Размер:
2 Mб
Скачать

2.6. Рассмотрим использование специальных символов оболочки

Продолжим рассмотрение правил использования командной строки. Поскольку оболочек много, то, естественно, что какие-то конкретные правила записи команд могут отличаться для разных версий программы. Но многие оболочки интерпретируют специально выделенный набор символов одинаково. За ними закреплены особые функции. Мы уже встретились с тем, как используются «/» и «$». В командной строке могут быть использованы и другие специальные символы. Рассмотрим их назначение, систематизировав такую информацию в одном месте. При этом для некоторых символов подробные примеры использования будут приведены и в других частях пособия. До начала рассмотрения использования некоторых специальных символов отметим, что их очень много. Рассматривать будем только небольшую часть. Описание всех из них содержится в страницах справочного руководства man страницы bash.

Символ \

Сначала изучим, как используется символ «\» – обратный слеш. Он может иметь разное применение. В имени файла он используется, когда за ним располагается пробел « » или другой символ, выполняющий служебную роль, но последнюю надо отменить. Следующая группа команд демонстрирует операции с каталогом, имеющим в имени пробел. В приведенном тексте применен символ (#), используемый в сценариях для записи комментариев.

# переход в домашний каталог пользователя

cd ~

# вывод его адреса

pwd

root

# создание каталога,

# имеющего в имени символ пробел

mkdir 1-th\ directory

# копирование файла в созданный каталог

cp .profile /root/1-th\ directory

# копирование второго файла в созданный каталог

cp .bashrc ./1-th\ directory

# вывод списка файлов текущего каталога

# и всех подчиненных ему

ls –R

.:

1-th directory

./1-th directory

Кавычки

Есть три типа кавычек: двойные ( " ), одиночные ( ’ ) и обратные ( ` ) (в литературе встречаются и другие названия третьих: одиночные апострофы, слабое ударение). Они всегда используются в паре.

Внутри двойных кавычек отменяется действие всех служебных символов кроме трех: $ (доллар), ` (обратные кавычки) и \ (обратный слеш). В некоторых вариантах оболочек пара таких символов отменяется еще и действие специальных символов «!» и «|».

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

Начнем с рассмотрения использования двойных кавычек. Используемая в нескольких следующих примерах команда echo выводят значения двух переменных HOME и BASH. Для двойных кавычек в первом и втором случаях вывод одинаков – двойные кавычки не отменяют действие символа $. Только в третьем случае его действие отменяется символом \, поэтому распечатывается не значение переменной, а набор символов $HOME.

echo “$HOME $BASH”

/root /bin/bash

echo “$HOME $BASH”

/root/bin /bash

echo “\$HOME $BASH”

$HOME /bin/bash

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

echo’$HOME $BASH’

$HOME $BASH

echo ’$HOME $BASH’

$HOME $BASH

echo ’\$HOME $BASH’

\$HOME $BASH

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

cal 12

то выводится информация о 12-м месяце текущего года.

Декабрь 2009

Пн

Вт

Ср

Чт

Пт

Сб

Вс

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Команда

date “+%m %y“

даст такой результат

12 09

Такие две команды можно соединить обратными кавычками так

cal `date “+%m %y“`

Это даст результат как у команды cal с параметрами 12 09

Декабрь 2009

Пн

Вт

Ср

Чт

Пт

Сб

Вс

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Продолжим рассматривать использование других специальных символов оболочек.

Символ &

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

Символ ;

Этот символ используется, когда в строке надо записать более одной команды. Если не ставить этот знак, то вторая команда будет восприниматься как параметры первой. Но если соединить этим знаком обе команды, то они будут выполнены последовательно. К примеру, если записать

cd / ; ls

то будут выполнены две команды. Первая сделает активным корневой каталог файловой системы, а вторая – распечатает на экране его содержимое.

bin dev home lost+found misc net proc sbin srv tmp var boot etc lib media mnt opt root selinux sys usr

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

Символ |

Этот случай использования специального символа оболочки мы уже рассматривали. Его применяют для связывания команд с перенаправлением результатов выполнения одной команды (стандартного вывода) на вход (стандартный ввод) следующей. Утилита ps выводит список активных процессов, а grep ищет и выводит в текстовом файле строки, содержащие фрагменты-образцы. Приведенная комбинация двух команд выводит на экран только те из активных процессов, которые начинаются с символа «[». Команда представляет интерес потому, что процессы ядра заключаются в квадратные скобки.

ps -ef | grep “\[“

Приведем еще примеры использования рассматриваемого специального символа. Команда wc подсчитывает характеристики файлов (количество символов, слов или строк). Такая комбинация команд позволяет подсчитать количество файлов текущего каталога

ls -l | wc -l

Отметим, что параметр -l команды wc выводит количество строк, а одноименный параметр первой команды выводит список файлов текущего каталога по одному в строке.

Если соединить знаком «|» утилиту printenv и команду сортировки содержимого файла sort, то получим список специальных переменных, который упорядочен по их имени

printenv | sort

Сделаем еще одно замечание о связывании команд. Для удобства просмотра на экране текстов большого размера используются команды more и less. Они позволяют выводить в постраничном режиме содержимое текстовых файлов. Связанные с другими командами символом «|», они обеспечивают постраничный вывод информации (при заполнении экрана вывод информации останавливается до нажатия определенной клавиши, например, пробел). Их отличие в том, что вторая (less) обеспечивает возврат к уже просмотренной информации, а первая – нет.

Символы && и ||

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

Если две команды соединены так

КОМАНДА1 && КОМАНДА2

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

Если вторую команду надо выполнить в случае неудачного завершения первой используют символы «||». В таком случае код выполнения первой команды отличен от нуля, Приведем примеры использования этих символа.

date || cal

Выполняется только первая команда date

Вск Апр 9 08:49:17 MSD 2006

date && cal

Выполняются обе команды date и cal

Ноя Суб 4 08:49:17 MSD 2006

Ноябрь 2006

Пн Вт Ср Чт Пт Су Вс

1 2 3 4 5

6 7 8 9 10 11 12

13 14 15 16 17 18 19

20 21 22 23 24 25 26

27 28 29 30

Задание 17.

Опробуйте использование символов && и || на следующих примерах. Команда

mkdir dir1

создает новый каталог. Если она завершается успешно, то код возврата будет 0, в противном случае – 1. Создайте каталог с именем dir1 и в этой же строке выведите сообщение, используя &&

mkdir dir1 && echo “Well”

Теперь соедините команду создания каталога с именами dir2 и вывод сообщения символом ||.

mkdir dir2|| echo “Well”

Теперь замените команду создания каталогов другой

grep root /etc/passwd

Она проверяет, есть ли в файле /etc/passwd (файл паролей) строка root. Задайвайте имя существующих пользователей (asplinux, bin), а затем не существующих (например, noroot, asplonux1). Соедините выполнение такой командой с выводом сообщения сначала символами &&, а затем – ||

Символы > < >>

Они используются для того, чтобы временно изменить назначение стандартных потоков: ввода, вывода и ошибок. Последние имеют следующие обозначения и цифровые эквиваленты.

stdin 0

stdout 1

stderr 2

По умолчанию каждая программа получает эти три потока. При этом ввод данных она ожидает с клавиатуры, а выводить информацию, в том числе об ошибках, будет на терминал. Символ > позволяет перенаправить стандартный вывод в файл. К примеру

date > fpr

позволяет перенаправить стандартный вывод команды date в файл fpr. Таким образом, в этом файле фиксируется текущая дата и его содержимое можно использовать в других командах. Использование символа >> позволяет добавить результат в уже созданный файл.

ls >> fpr

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

cat < fpr

Сделаем небольшое отступление, подробнее изучив использование команды cat. Она может выполнять разные операции. Мы уже приводили вариант использования команды, когда создавали текстовые файлы – сценарии.

cat > file

Приведем еще примеры

cat

Таким образом, начинается вывод информации с клавиатуры на экран. Напомним, что комбинация <Ctrl+D> – означает окончание ввода с клавиатуры.

Следующая команда

cat file > file1

выполняет копирование файла file в file1.

Исполнив это

cat >> file1

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

И, наконец, подобным образом

cat file file1 > file2

объединяют в файле file содержимое других файлов (не обязательно других) – file1 и file2 (или file1 и file1, соответственно).

Задание 18.

Сравните содержимое каталогов двух пользователей: asplinux и root. Определите, какой из них содержит больше файлов.

Задание 19.

В файле my запишите результат выполнения команды date.

date “+%m %y” > my

Перенаправьте содержимое файла my команде cal

cal < my

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

ls –R 2>> errlist1

cat errlist1

Теперь у этой же команды уберем пробел, отделяющий имя команды от параметра, и выполним две такие команды

lsR > errlist2

cat errlist2

Результаты последней команды будут такими

-bash: ls-R: команда не найдена

Изучим использование шаблонов в именах файлов.

Символы * ? [ ]_

Они используются для замещения определенного набора символов в именах файлов. При этом фиксируются группы файлов с «похожими» именами. Символ * заменяет любой набор символов. К примеру, а* определяет все файлы, начинающиеся на букву а и имеющие в имени любое количество символов. В противоположность символ ? означает замещение только одного символа. Такой пример использования шаблона а? фиксирует все файлы из двух символов, начинающиеся на символ а. Квадратные скобки позволяют выводить список файлов, в имени которых содержится один из группы символов. Квадратные скобки часто используют с символом * или ?. Если в команде вместо имени указать [abс]??, то предполагается воздействовать на файлы, имеющие в имени три буквы, начинающиеся на а, b или с.

Для подробного рассмотрения использования шаблонов в именах файлов сделаем следующее. Создадим несколько текстовых файлов, используя команды cat и cp, а далее будем выводить на экран часть из них командой ls, используя разные шаблоны для формирования группы из имеющихся файлов. Шаблоны имен файлов являются частью средства UNIX/Linux. Они называются регулярными выражениями и используются со многим командами.

Для начала создадим файл a из другого - /root/.bashrc, выполнив следующие команды

cd ~

cat .bashrc > a

Сделать копию a в файле с именем A можно еще и так

cp a A

Получим файлы со следующими именами: a A1 B Ba b1 ad f fa fab.

Задание 20.

Проверьте результат выполнения следующих команд (параметр -C давайте для экономного вывода):

ls -C [a,B]

ls -C [aB]

ls -C [a-B]

ls -C [B-a]

ls -C *[a,A]

ls -C *[a,B]*

ls -C *a

ls -C *a*

ls -C [a-s]

ls -C [a-b]*

ls -C [a-f]

ls -C ?a

ls -C [a-b]*

ls -C fa

Соседние файлы в папке Операционные системы