Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

File exists

File exists

The file no longer exists

creating file /tmp/my tmp_file_141

press interrupt (CTRL-C) to interrupt ...

File exists

File exists

File exists

File exists

Как это работает

Сценарий использует команду

trap
для организации выполнения команды
rm -f /tmp/my_tmp_file_$$
при возникновении сигнала
INT
(прерывание).
Затем сценарий выполняет цикл
while
до тех пор, пока существует файл. Когда пользователь нажимает комбинацию клавиш <Ctrl>+<C>, выполняется команда
rm -f /tmp/my_tmp_file_$$
, а затем возобновляется выполнение цикла
while
. Поскольку теперь файл удален, первый цикл
while
завершается стандартным образом.

Далее сценарий снова применяет команду

trap
, на этот раз для того, чтобы сообщить, что при возникновении сигнала
INT
никакая команда не выполняется. Затем сценарий создает заново файл и выполняет второй цикл
while
. Когда пользователь снова нажимает комбинацию клавиш <Ctrl>+<C>, не задана команда для выполнения, поэтому реализуется стандартное поведение: немедленное прекращение выполнения сценария. Поскольку сценарий завершается немедленно, заключительные команды
echo
и
exit
никогда не выполняются.

unset

Команда

unset
удаляет переменные или функции из окружения. Она не может проделать это с переменными, предназначенными только для чтения и определенными командной оболочкой, такими как
IFS
. Команда применяется редко.

В следующем сценарии сначала выводится строка

Hello world
, а во второй раз новая строка.

#!/bin/sh

foo="Hello World"

echo $foo

unset foo

echo $foo

Примечание

Написание

foo=
подобно, но не идентично применению команды
unset
в только что приведенной программе. Оператор
foo=
задает для переменной
foo
значение
null
, но при этом переменная
foo
все еще существует. Команда
unset foo
удаляет из окружения переменную
foo
.

Еще две полезные команды и регулярные выражения

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

Команда find

Первой рассмотрим команду

find
. Эта команда, применяющаяся для поиска файлов, чрезвычайно полезна, но новички в ОС Linux часто находят ее немного сложной в использовании в немалой степени из-за ее опций, критериев и аргументов, определяющих действия (action-type), причем результат одного из этих аргументов может влиять на обработку последующих аргументов.

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

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

# find / -name test -print

/usr/bin/test

#

В зависимости от варианта установки системы на вашей машине вы можете найти и другие файлы, также названные test. Как вы, вероятно, догадываетесь, команда звучит так: "искать, начиная с каталога /, файл с именем test и затем вывести на экран имя файла". Легко, не правда ли? Безусловно.

Выполнение команды займет какое-то время, она будет искать на нашей машине и на сетевом диске машины с ОС Windows. Это происходит потому, что на компьютере с Linux смонтирована (с помощью пакета SAMBA) порция файловой системы машины с ОС Windows. Похоже, что подобный поиск будет вестись, даже если мы знаем, что искомый файл находится на машине под управлением ОС Linux.

В этом случае на помощь приходит первая опция. Если вы укажете опцию

– mount
, то сможете сообщить команде find о том, что смонтированные каталоги проверять не нужно.

# find / -mount -name test -print

/usr/bin/test

#

Мы нашли все тот же файл на нашей машине, но на сей раз гораздо быстрее и без поиска в смонтированных файловых системах.

Полная синтаксическая запись команды

find
выглядит следующим образом:

find [путь] [опции] [критерии] [действия]

Часть записи

[путь]
понятна и проста: вы можете указать абсолютный путь поиска, например,
/bin
, или относительный, например
..
При необходимости можно задать несколько путей — например,
find /var /home
.

В табл. 2.10 перечислены основные опции команды.

Таблица 2.10

Опция Описание
– depth
Поиск в подкаталогах перед поиском в самом каталоге
– follow
Следовать по символическим ссылкам
– maxdepths N
При поиске проверять не более
N
вложенных уровней каталога
– mount
(или
– xdev
)
Не искать в каталогах других файловых систем

Теперь о критериях. В команде

find
можно задать большое число критериев, и каждый из них возвращает либо
true
, либо
false
. В процессе работы команда
find
рассматривает по очереди каждый файл и применяет к нему все критерий в порядке их определения. Если очередной критерий возвращает значение
false
, команда
find
прекращает анализ текущего файла и переходит к следующему; если критерий возвращает значение
true
, команда применяет следующий критерий к текущему файлу или совершает заданное действие над ним. В табл. 2.11 перечислены самые распространенные критерии; полный список тестов, которые можно применять в команде
find
, вы найдете на страницах интерактивного справочного руководства.

Поделиться:
Популярные книги

Тринадцатый X

NikL
10. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Тринадцатый X

Изгой Проклятого Клана. Том 3

Пламенев Владимир
3. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Изгой Проклятого Клана. Том 3

Орден Архитекторов 12

Винокуров Юрий
12. Орден Архитекторов
Фантастика:
фэнтези
5.00
рейтинг книги
Орден Архитекторов 12

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Личный аптекарь императора

Карелин Сергей Витальевич
1. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Личный аптекарь императора

Везунчик. Проводник

Бубела Олег Николаевич
3. Везунчик
Фантастика:
фэнтези
6.62
рейтинг книги
Везунчик. Проводник

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Мастер 4

Чащин Валерий
4. Мастер
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Мастер 4

Чужак из ниоткуда

Евтушенко Алексей Анатольевич
1. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда

Войсковые разведчики в Афгане. Записки начальника разведки дивизии

Кузьмин Николай Павлович
1. Афган: Последняя война СССР
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Войсковые разведчики в Афгане. Записки начальника разведки дивизии

Локки 11. Потомок бога

Решетов Евгений Валерьевич
11. Локки
Фантастика:
героическая фантастика
боевая фантастика
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Локки 11. Потомок бога

Неудержимый. Книга XXXVII

Боярский Андрей
37. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXXVII

Я Гордый. Часть 4

Машуков Тимур
4. Стальные яйца
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый. Часть 4

Воин-Врач

Дмитриев Олег
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Воин-Врач