Звездочка перед именем файла в линукс

Обновлено: 08.07.2024

Bash, а также другие командные оболочки Linux и средства языков программирования позволяют находить в структуре дерева каталогов те файлы, имена которых соответствуют определенному шаблону имени файла. В случае командной оболочки именно она сравнивает с шаблоном имя очередного файла. Если оно соответствует шаблону, то файл будет учтен, если нет – будет пропущен. Шаблон можно сравнить с коробкой, в которую влезет не каждый объект. Не только из-за размеров, также из-за несовпадения формы коробки и предмета.

Зачем нужны шаблоны имен? Часто требуется выполнить однотипные действия над группой файлов. Описывать эти действия по отношению к каждому отдельному файлу было бы трудоемкой задачей. Таким образом, шаблоны позволяют выделить группу файлов, чьи имена удовлетворяют определенным условиям, из общей массы.

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

Шаблоны имен файлов и каталогов задаются с помощью специальных символов. Чаще используются два: * – звездочка, ? – знак вопроса.

Звездочкой (*) в шаблоне обозначают любую группу символов. Их количество роли не играет. Это могут быть пять, десять, один символ или даже ни одного. Так, например, шаблону, состоящему всего из одного символа * , будет соответствовать абсолютно любой файл. Использование шаблона *.html позволит выделить все html-файлы, а шаблон my*.odt – файлы, начинающиеся с "my" и оканчивающиеся на ".odt". Шаблон *2010* определяет все файлы, в именах которых присутствует группа символов 2010.

Знаком вопроса (?) в шаблоне обозначают любой один символ. Например, под шаблон otchet. подойдут файлы, имеющие расширение из любых трех букв, но начинающиеся именно так, как задано в шаблоне. Шаблону descrip?ion.pdf будут соответствовать файлы с заданным именем, но вместо знака вопроса может стоять любой символ.

Кроме символов звезды и вопроса, существуют более сложные правила записи шаблонов. Так использование квадратных скобок [ ] со списком вложенных значений позволяет осуществлять более гибкий поиск файлов. Пусть требуется найти все файлы, имена которых начинаются с буквы m, при этом регистр не учитывается. Шаблон будет выглядеть так: [mM]* .

Если надо одновременно найти файлы, начинающиеся на буквы, идущие подряд в алфавите, то задается диапазон. Например, под шаблон [m-pM-P]. png подойдут все файлы с расширением png, имена которых состоят из четырех букв, причем первая буква m или n или o или p без учета регистра.

Понятно, что в одном шаблоне имени файла можно использовать разные специальные символы. Например, [aA]*. .

В Bash шаблоны имен используются с командами, которые в качестве аргументов принимают имена файлов. Например, ls – просмотр каталогов, cp – копирование файлов, find – поиск файлов и др. Однако на самом деле командам передается не шаблон, а уже подошедшие под него файлы. Определением подходящих под шаблон объектов занимается сама командная оболочка Linux, в данном случае Bash.

Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.

Глава 15. Формирование списков имен файлов на основе шаблонов

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

Звездочка (*)

Звездочка * интерпретируется командной оболочкой как символ для генерации списка имен файлов, причем сам символ звездочки может преобразовываться в любую комбинацию символов (или даже в строку без символов). В том случае, если не задано пути к директории для формирования списка имен файлов, командная оболочка будет использовать имена файлов из текущей директории. Обратитесь к странице руководства glob(7) для получения дополнительной информации. (Данный вопрос также рассматривается в теме LPI 1.103.3.)

Знак вопроса (?)

Аналогично звездочке, знак вопроса ? интерпретируется командной оболочкой как символ для генерации списка имен файлов, причем сам знак вопроса соответствует ровно одному символу имени файла.

Квадратные скобки ([])

Открывающаяся квадратная скобка [ интерпретируется командной оболочкой как символ для генерации списка имен файлов, соответствующий любым из символов, находящихся между символом [ и первым следующим за ним символом ] . Порядок следования символов в списке между скобками не имеет значения. Каждая пара символов скобок заменяется ровно на один символ. Также с помощью символа восклицательного знака ! вы можете исключать символы из списка, расположенного между квадратными скобками. Кроме того, у вас имеется возможность создания комбинаций из описанных выше шаблонов .

Диапазоны a-z и 0-9

Командная оболочка bash также распознает объявления диапазонов символов между квадратными скобками.

Переменная окружения $LANG и квадратные скобки

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

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

Предотвращение формирования списков имен файлов на основе шаблонов

В примере ниже не должно быть ничего удивительного. При использовании команды echo * в пустой директории будет выведен символ * . А при использовании той же команды в директории с файлами будут выведены имена всех файлов. Формирование списков имен файлов на основе шаблонов может быть предотвращено путем помещения специальных символов в кавычки, а также экранирования этих символов таким образом, как показано в примере ниже.

Практическое задание: формирование списков имен файлов на основе шаблонов

1. Создайте тестовую директорию и перейдите в нее.

(Имя последнего файла состоит из 6 символов, включая пробел).

3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.

4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.

5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.

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

7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.

8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.

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

10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.

11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.

12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.

13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.

14. Скопируйте значение переменной окружения $LANG в значение переменной окружения $MyLANG.

15. Продемонстрируйте влияние значения переменной окружения $LANG на вывод имен файлов с буквенными символами из диапазонов A-Z или a-z.

16. Вы получили информацию о том, что один из ваших серверов был взломан, причем взломщик, вероятнее всего, подменил бинарный файл с реализацией команды ls . Вы знаете о том, что использование команды echo не несет опасности. Можно ли заменить команду ls командой echo ? Как вы будете выводить список файлов в текущей директории с помощью команды echo ?

17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?

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

1. Создайте тестовую директорию и перейдите в нее.

(Имя последнего файла состоит из 6 символов, включая пробел).

3. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file.

4. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File.

5. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки file и заканчиваются числовым символом.

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

7. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File и имеют пятый числовой символ.

8. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с строки File, имеют пятый числовой символ и никаких символов более.

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

10. Выведите список всех имен файлов (с помощью команды ls), которые состоят ровно из пяти символов.

11. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f или F и оканчиваются символом 3 или A.

12. Выведите список всех имен файлов (с помощью команды ls), которые начинаются с символа f и оканчиваются числовым символом, причем вторым символом является символ i или R.

13. Выведите список всех имен файлов (с помощью команды ls), которые не начинаются с символа F.

14. Скопируйте значение переменной окружения $LANG в значение переменной окружения $MyLANG.

15. Продемонстрируйте влияние значения переменной окружения $LANG на вывод имен файлов с буквенными символами из диапазонов A-Z или a-z.

Обратитесь к примеру в книге.

16. Вы получили информацию о том, что один из ваших серверов был взломан, причем взломщик, вероятнее всего, подменил бинарный файл с реализацией команды ls . Вы знаете о том, что использование команды echo не несет опасности. Можно ли заменить команду ls командой echo ? Как вы будете выводить список файлов в текущей директории с помощью команды echo ?

17. Существуют ли другие команды, помимо cd, предназначенные для изменения текущей директории?

Узнайте, как метасимволы Linux расширяют использование инструментов командной строки

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

Полная остановка как метасимвол (.)

Скромный полный останов используется для указания текущей позиции при запуске таких команд, как cd, find или sh, но в таких приложениях, как awk, grep и sed, это подстановочный знак, используемый для обозначения определенного числа любого символа.

Например, следующая команда найдет все mp3-файлы в текущей папке и ее подпапках.

Если вы выполните эту команду в своем текущем рабочем каталоге (pwd), вы, вероятно, увидите возвращенные результаты, при условии, что вы храните ваши mp3-файлы в папке музыки в вашей домашней папке.

Теперь посмотрите на эту команду:

Команда ps выводит список всех запущенных процессов на вашем компьютере. Команда grep берет строки ввода и ищет шаблон.

Поэтому команда ps -ef возвращает список запущенных процессов. Метасимвол pipe (|) отправляет этот список в команду grep, которая ищет любую строку в списке, содержащую «f..efox», где точка относится к двум любым символам.

Если у вас запущен Firefox, вы получите совпадение. Точно так же, если у вас запущена программа с именем fonefox или freefox, они также будут возвращены.

Звездочка как метасимвол (*)

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

* .Mp3 возвращает совпадение для любого имени файла, заканчивающегося на .mp3. Точно так же я мог бы использовать звездочку с командой grep в последнем разделе следующим образом:

Стоит отметить, что это немного отличается, потому что звездочка означает ноль или более, поэтому, кроме поиска Firefox, Facefox и Fonefox, он также может найти Flutefox, Ferretfox и даже просто Fefox.

Карат как метасимвол (^)

Карат (^) используется для обозначения начала строки или строки. Так как это используется?

Команда ls используется для вывода списка всех файлов в папке следующим образом:

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

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

В приведенном выше примере ls возвращает список имен файлов и передает этот список команде grep, которая используется для сопоставления с образцом. Grep знает, что символ карата означает найти все, что начинается с символов, следующих за ним, и в данном случае это «гном».

Символ доллара как метасимвол ($)

Символ доллара может иметь несколько значений в качестве метасимвола в Linux.

При использовании для сопоставления с образцами это означает противоположность каратам и обозначает любой образец, который оканчивается определенной строкой.

В этом списке перечислены все файлы, заканчивающиеся на png .

Символ доллара также используется для доступа к переменным среды в оболочке bash.

Строка export dog = molly создает переменную среды с именем dog и устанавливает ее значение «molly». Для доступа к переменной среды используется символ $. С символом $ оператор echo $ dog отображает «molly». Без этого оператор echo dog просто отображает слово dog.

Метасимволы (\\)

Иногда вы не хотите, чтобы метасимвол имел особое значение. Например, рассмотрим, есть ли у вас файл с именем f.refox и файл с именем firefox .

Теперь посмотрим на следующую команду:

Как вы думаете, что возвращается? И f.refox, и firefox возвращаются, потому что они оба соответствуют шаблону.

Чтобы вернуть только f.refox, вам нужно будет выйти из полной остановки, чтобы фактически означать полную остановку следующим образом:

Скобки как метасимвол ([])

Вы можете использовать скобки при поиске материалов. Скобки позволяют указать конкретные буквы, которые вы хотите сопоставить в любом месте шаблона.

В этом списке перечислены все файлы, которые начинаются с букв a, b или c.

Вы можете использовать скобки в начале, конце или даже в середине шаблона поиска.

Если вы хотите искать большой диапазон букв, вы можете вместо этого использовать символ переноса (-). Например, ls [a-h] * вернет все файлы, которые начинаются с любой буквы от a до h.

Метасимвол Акцента Могила

Во всех приведенных выше примерах метасимвол канала использовался для отправки результатов одной команды (например, команды ls) другой команде (например, команды grep).

Сначала будет запущена команда which jpg , чтобы определить, в каком каталоге находятся файлы jpg, и результаты этого поиска будут переданы команде ls , которая перечислит все из этих файлов.

Linux точка

Метасимвол — это любой символ, имеющий особое значение, например, карат (^), знак доллара ($) или звездочка (*). В Linux имеется достаточное количество этих метасимволов, и их значения различаются в зависимости от того, какую команду Linux вы используете.

Полная Остановка как Метасимвол (.)

Полный Стоп ( . ) Указывает текущую позицию при запуске таких команд, как cd , find или sh. В таких приложениях, как awk , grep и sed , это подстановочный знак, который обозначает конкретное число любого символа.

Например, следующая команда находит все файлы MP3 в текущей папке и ее подпапках.

Если вы выполните эту команду в текущем рабочем каталоге (pwd), вы увидите возвращенные результаты, при условии, что вы храните файлы MP3 в музыкальной папке в вашей домашней папке.

Теперь посмотрите на эту команду:

Команда ps выводит список всех запущенных процессов на вашем компьютере. Команда grep принимает строки ввода и ищет шаблон.

Linux точка

Команда ps -ef возвращает список запущенных процессов. Метасимвол pipe ( | ) отправляет этот список в команду grep, которая ищет любую строку в списке, содержащую f..efox , где точки относятся к двум любым символам.

Если Firefox запущен, вы получите совпадение. Аналогично, если запущена программа с именем fonefox или freefox, они также возвращаются.

Если вам нужно искать только один символ, вместо метасимвола с точкой (.), Используйте? метасимволом. Используя ? Метасимвол относится к любому отдельному символу либо в начале, либо в конце шаблона.

Звездочка как метасимвол (*)

Звездочка ( * ) является общеизвестным метасимволом. Это означает ноль или более любого символа при поиске шаблона. Например:

Список звездочек в Linux

Часть * .flac команды возвращает совпадение для любого имени файла, заканчивающегося на .flac. Аналогично, вы можете использовать звездочку с командой grep в последнем разделе следующим образом:

Это немного отличается, потому что звездочка означает ноль или более, поэтому, помимо поиска Firefox, Facefox и Fonefox, она также находит Flutefox, Ferretfox и Fefox.

Символ звездочки в Linux

Карат как метасимвол (^)

Карат ( ^ ) используется для обозначения начала строки или строки. Так как это используется?

Команда ls выводит список файлов в папке следующим образом:

Если вы хотите перечислить файлы в папке, которая начинается с определенной строки, например, gnome, карат можно использовать для указания этой строки. Например:

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

Персонаж в каратах

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

Символ доллара как метасимвол ($)

Символ доллара ( $ ) имеет несколько значений в качестве метасимвола в Linux. Когда используется для сопоставления с образцами, это означает противоположность карат и обозначает любой образец, который заканчивается определенной строкой. Например:

В этом списке перечислены все файлы, заканчивающиеся на png.

Символ доллара также используется для доступа к переменным среды в оболочке bash. Например:

Linux знак доллара

Строка export dog = molly создает переменную среды с именем dog и устанавливает ее значение molly . Чтобы получить доступ к переменной окружения, используйте символ $. С символом $ оператор echo $ dog отображает Молли. Без этого в выражении echo dog отображается слово dog.

Спасающиеся метасимволы (\\)

Иногда вы не хотите, чтобы метасимвол имел особое значение. Например, если файл называется f.refox, а другой файл называется firefox .

Теперь посмотрите на следующую команду:

Как вы думаете, что возвращается? И f.refox, и firefox возвращаются, потому что оба соответствуют шаблону.

Linux escape-персонаж

Чтобы вернуть только f.refox, экранируйте точку полной остановки, чтобы фактически означать точку полной остановки следующим образом:

Скобки как метасимвол ([])

Вы можете использовать скобки ( [] ) при поиске шаблонов. Квадратные скобки указывают конкретные буквы для соответствия в любом месте шаблона. Например:

В этом списке перечислены все файлы, содержащие буквы a, b или c.

Символ скобки Linux

Вы можете использовать квадратные скобки в начале, конце или в середине шаблона поиска.

Для поиска диапазона букв используйте дефис (-). Например, ls [ah] * возвращает файлы, которые начинаются с любой буквы от a до h.

Метасимвол Акцента Могила

В приведенных выше примерах метасимвол канала отправляет результаты одной команды (например, команды ls) другой команде (например, команде grep).

Альтернативный способ сделать это — использовать обратную кавычку, также известную как accent grave ( ` ), чтобы вставить результаты одной команды в другую команду. Для этого сохраните результат одной команды в переменной. Например:

Символ обратной черты в Linux

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

Комментарии могут располагаться и в конце строки с исполняемым кодом.

Комментариям могут предшествовать пробелы (пробел, табуляция).

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

Разделитель команд. [Точка-с-запятой] Позволяет записывать две и более команд в одной строке.

Ограничитель в операторе выбора case . [Двойная-точка-с-запятой]

команда "точка" . Эквивалент команды source (см. Пример 11-18). Это встроенная команда bash.

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

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

Символ точка довольно часто используется для обозначения каталога назначения в операциях копирования/перемещения файлов.

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

Двойные кавычки . В строке "STRING" , ограниченной двойными кавычками не выполняется интерпретация большинства служебных символов, которые могут находиться в строке. см. Глава 5.

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

Более детальному рассмотрению темы экранирования посвящена Глава 5.

Разделитель, используемый в указании пути к каталогам и файлам. [слэш] Отделяет элементы пути к каталогам и файлам (например /home/bozo/projects/Makefile).

Подстановка команд. [обратные кавычки] Обратные кавычки могут использоваться для записи в переменную команды `command` .

пустая команда. [двоеточие] Это эквивалент операции "NOP" ( no op, нет операции). Может рассматриваться как синоним встроенной команды true. Команда " : " так же является встроенной командой Bash, которая всегда возвращает "true" ( 0 ).

Символ-заполнитель в условном операторе if/then:

Как символ-заполнитель для оператора вложенного документа. См. Пример 17-9.

В комбинации с оператором > (оператор перенаправления вывода), усекает длину файла до нуля. Если указан несуществующий файл -- то он создается.

В комбинации с оператором >> -- оператор перенаправления с добавлением в конец файла и обновлением времени последнего доступа ( : >> new_file). Если задано имя несуществующего файла, то он создается. Эквивалентно команде touch.

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

Символ " : " может использоваться как разделитель полей в /etc/passwd и переменной $PATH.

инверсия (или логическое отрицание) используемое в условных операторах. Оператор ! инвертирует код завершения команды, к которой он применен. (см. Пример 6-2). Так же используется для логического отрицания в операциях сравнения, например, операция сравнения "равно" ( = ), при использовании оператора отрицания, преобразуется в операцию сравнения -- "не равно" ( != ). Символ ! является зарезервированным ключевым словом BASH.

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

Кроме того, из командной строки оператор ! запускает механизм историй Bash (см. Приложение F). Примечательно, что этот механизм недоступен из сценариев (т.е. исключительно из командной строки).

символ-шаблон. [звездочка] Символ * служит "шаблоном" для подстановки в имена файлов. Одиночный символ * означает любое имя файла в заданном каталоге.

В регулярных выражениях токен * представляет любое количество (в том числе и 0) символов.

арифметический оператор. В арифметических выражениях символ * обозначает операцию умножения.

Двойная звездочка (два символа звездочки, следующих подряд друг за другом -- ** ), обозначает операцию возведения в степень.

Оператор проверки условия. В некоторых выражениях символ ? служит для проверки выполнения условия.

В конструкциях с двойными скобками, символ ? подобен трехместному оператору языка C. См. Пример 9-28.

сивол-шаблон. Символ ? обозначает одиночный символ при подстановке в имена файлов. В регулярных выражениях служит для обозначения одиночного символа.

Символ $ , предшествующий имени переменной, указывает на то, что будет получено значение переменной.

end-of-line (конец строки). В регулярных выражениях, символ "$" обозначает конец строки.

код завершения. Переменная $? хранит код завершения последней выполненной команды, функции или сценария.

id процесса. Переменная $$ хранит id процесса сценария.

группа команд.

Команды, заключенные в круглые скобки исполняются в дочернем процессе -- subshell-е.

Переменные, создаваемые в дочернем процессе не видны в "родительском" сценарии. Родительский процесс-сценарий, не может обращаться к переменным, создаваемым в дочернем процессе.

инициализация массивов.

Фигурные скобки.

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

Использование неэкранированных или неокавыченных пробелов внутри фигурных скобок недопустимо.

file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

Блок кода. [фигурные скобки] Известен так же как "вложенный блок" , эта конструкция, фактически, создает анонимную функцию. Однако, в отличии от обычных функций, переменные, создаваемые во вложенных блоках кода, доступны объемлющему сценарию.

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

Пример 3-1. Вложенные блоки и перенаправление ввода-вывода

Пример 3-2. Сохранение результата исполнения вложенного блока в файл

В отличие от групп команд в (круглых скобках), описаных выше, вложенные блоки кода, заключенные в исполняются в пределах того же процесса, что и сам скрипт (т.е. не вызывают запуск дочернего процесса -- subshell). [2]

pathname -- полное имя файла (т.е. путь к файлу и его имя). Чаще всего используется совместно с командой find.

Обратите внимание на то, что символ " ; " , которым завершается ключ -exec команды find, экранируется обратным слэшем. Это необходимо, чтобы предотвратить его интерпретацию.

test.

Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test (и ее синонимом), И не имеет никакого отношения к "внешней" утилите /usr/bin/test.

test.

Проверка истинности выражения, заключенного между [[ ]] (зарезервированное слово интерпретатора).

См. описание конструкции [[ . ]] ниже.

элемент массива.

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

диапазон символов.

двойные круглые скобки.

Вычисляется целочисленное выражение, заключенное между двойными круглыми скобками (( )) .

См. обсуждение, посвященное конструкции (( . )) .

Конструкция scriptname >filename перенаправляет вывод scriptname в файл filename. Если файл filename уже существовал, то его прежнее содержимое будет утеряно.

Конструкция command &>filename перенаправляет вывод команды command, как со stdout, так и с stderr, в файл filename.

Конструкция command >&2 перенаправляет вывод со stdout на stderr.

Конструкция scriptname >>filename добавляет вывод scriptname к файлу filename. Если задано имя несуществующего файла, то он создается.

(command)>

<(command)

перенаправление ввода на встроенный документ.

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

Конвейеры (еще их называют каналами) -- это классический способ взаимодействия процессов, с помощью которого stdout одного процесса перенаправляется на stdin другого. Обычно используется совместно с командами вывода, такими как cat или echo, от которых поток данных поступает в "фильтр" (команда, которая на входе получает данные, преобразует их и обрабатывает).

cat $filename | grep $search_word

В конвейер могут объединяться и сценарии на языке командной оболочки.

А теперь попробуем объединить в конвейер команду ls -l с этим сценарием.

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

Конвейер исполняется в дочернем процессе, а посему -- не имеет доступа к переменным сценария.

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

принудительное перенаправление, даже если установлен ключ noclobber option.

логическая операция OR (логическое ИЛИ). В опрециях проверки условий, оператор || возвращает 0 (success), если один из операндов имеет значение true (ИСТИНА).

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

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

Пример 3-3. Запуск цикла в фоновом режиме

Команда, исполняемая в пределах сценария в фоне, может подвесить сценарий, ожидая нажатия клавиши. К счастью, это легко "лечится".

Логическая операция AND (логическое И). В операциях проверки условий, оператор && возвращает 0 (success) тогда, и только тогда, когда оба операнда имеют значение true (ИСТИНА).

префикс ключа. С этого символа начинаются опциональные ключи команд.

COMMAND -[Option1][Option2][. ]

ls -al

sort -dfu $filename

set -- $variable

перенаправление из/в stdin или stdout. [дефис]

Обратите внимание, что в этом контексте "-" - не самостоятельный оператор Bash, а скорее опция, распознаваемая некоторыми утилитами UNIX (такими как tar, cat и т.п.), которые выводят результаты своей работы в stdout.

В случае, когда ожидается имя файла, тогда "-" перенаправляет вывод на stdout (вспомните пример с tar cf) или принимает ввод с stdin.

Добавим символ "-" и получим более полезный результат. Это заставит командный интерпретатор ожидать ввода от пользователя.

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

Используя передачу stdout по конвейеру другим командам, можно выполнять довольно эффектные трюки, например вставка строк в начало файла.

С помощью команды diff -- находить различия между одним файлом и частью другого:

grep Linux file1 | diff file2 -

И наконец пример использования служебного символа "-" с командой tar.

Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток

Могут возникнуть конфликтные ситуации между опреатором перенаправления "-" и именами файлов, начинающимися с символа "-" . Поэтому сценарий должен проверять имена файлов и предаварять их префиксом пути, например, ./-FILENAME, $PWD/-FILENAME или $PATHNAME/-FILENAME.

Если значение переменной начинается с символа "-" , то это тоже может быть причиной появления ошибок.

предыдущий рабочий каталог. [дефис] Команда cd - выполнит переход в предыдущий рабочий каталог, путь к которому хранится в переменной окружения $OLDPWD .

Не путайте оператор "-" (предыдущего рабочего каталога) с оператором "-" (переназначения). Еще раз напомню, что интерпретация символа "-" зависит от контекста, в котором он употребляется.

Минус. Знак минус в арифметических операциях.

В зависимости от контекста применения, символ " = " может выступать в качестве оператора сравнения.

Плюс. Оператор сложения в арифметических операциях.

В зависимости от контекста применения, символ + может выступать как оператор регулярного выражения.

Ключ (опция). Дополнительный флаг для ключей (опций) команд.

Отдельные внешние и встроенные команды используют символ " + " для разрешения некоторой опции, а символ " - " -- для запрещения.

модуль. Модуль (остаток от деления) -- арифметическая операция.

В зависимости от контекста применения, символ % может выступать в качестве шаблона.

домашний каталог. [тильда] Соответствует содержимому внутренней переменной $HOME.

bozo -- домашний каталог пользователя bozo, а команда ls

bozo выведет содержимое его домашнего каталога.

/ -- это домашний каталог текущего пользователя, а команда ls

/ выведет содержимое домашнего каталога текущего пользователя.

текущий рабочий каталог. Соответствует содержимому внутренней переменной $PWD.

предыдущий рабочий каталог. Соответствует содержимому внутренней переменной $OLDPWD.

начало-строки. В регулярных выражениях символ "^" задает начало строки текста.

изменяет поведение терминала или управляет выводом текста. Управляющий символ набирается с клавиатуры как комбинация CONTROL + <клавиша>.

Ctl-C

Завершение выполнения процесса.

Ctl-D

Выход из командного интерпретатора (log out) (аналог команды exit).

"EOF" (признак конца файла). Этот символ может выступать в качестве завершающего при вводе с stdin.

Ctl-G

Ctl-H

Backspace -- удаление предыдущего символа.

Ctl-J

Ctl-L

Перевод формата (очистка экрана (окна) терминала). Аналогична команде clear.

Ctl-M

Ctl-U

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

Ctl-Z

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

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

$IFS -- переменная специального назначения. Содержит символы-разделители полей, используемые некоторыми командами. По-умолчанию -- пробельные символы.

Примечания

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

Исключение: блок кода, являющийся частью конвейера, может быть запущен в дочернем процессе (subshell-е).

Читайте также: