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

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

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

Символ \

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

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 11

то выведется информация о 11-м месяце 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

Команда

date “+%m %y“

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

11 06

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

cal `date “+%m %y“`

Это даст результат как у команды cal с параметрами 11 06.

Ноябрь 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

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

Символ ;

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

cd / ; ls

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

bin

dev

etc

home

initrd

lib

media

misc

mnt

opt

proc

root

sbin

selinux

sys

tmp

usr

var

Символ &

Этот символ позволяет перевести выполнение команды в фоновый режим. Последний может одновременно реализовывать несколько процессов. В режиме МНОГОЗАДАЧНОСТИ они будут попеременно получать системные ресурсы и, прежде всего, процессорное время. Мы подробнее поговорим о фоновых процессах в лабораторной работе 4.

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

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

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

КОМАНДА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

Задание 18

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

mkdir dir1

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

mkdir dir1 && echo “Well”

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

mkdir dir|| echo “Well”

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

grep root /etc/passwd

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

Символы > < >>_

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

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 file1 file2 > file

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

Задание 19

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

Задание 20

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

date “+%m %y” > my

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

cal < my

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

ls –R 2>> errlist1

cat errlist1

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

ls–R 2> errlist2

cat errlist1

-bash: ls-R: command not found

Символ |_

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

ps -ef | grep “\[“

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

ls -l | wc -l

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

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

printenv | sort

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

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

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

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

Задание 21

Проверьте результат выполнения следующих команд (параметр -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

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