Скобки в командной строке

Скобки в командной строке

Библиотека сайта rus-linux.net

Что означают фигурные скобки в командной строке?

Фигурные скобки <по-английски — brace>это один из условных знаков, помогающих сократить количество писанины в командной строке.

Формально они входят в число семи expansions (расширение, раскрытие), применяемых в командной строке шелла bash.

Что это за расширения такие? По-русски их лучше всего назвать сокращениями, как это ни странно. Смотрите сами: всем известная тильда (

), будучи напечатана в командной строке, раскроется в путь к нашему домашнему каталогу:

Вот и выходит, что тильда является сокращением адреса /home/имя_пользователя.

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

Раскрытие фигурных скобок

(вместо троеточия впишем имена всех промежуточных каталогов).

А можем привлечь на помощь сокращение — фигурные скобки:

Проделайте этот опыт и сами убедитесь, что в рабочей директории появилось 12 новых каталогов. Чтобы они нам в дальнейшем не мешали, удалим их:

Проверьте — их больше нет.

Однако интуиция подсказывает, что должен существовать и более короткий путь, и этот путь, конечно, есть:

А для более сложных сочетаний даже:

Это, сами понимаете, для выборочного создания директорий.

Чтобы закончить с этим примером, отметим, что в выражении фото_<01,02,03,04,05,06,07,08,09,10,11,12>_2009, часть выражения фото_ будет называться префиксом (а по-нашему — приставкой), а _2009 называется суффиксом (или окончанием).

Вот еще пример применения фигурных скобок:

Нужно изменить права доступа к нескольким файлам: old, current и new, находящимся в одной директории:

Мы применили фигурные скобки, чтобы не писать имена и пути (path) всех трех файлов полностью.

Осторожно, скобки раскрываются

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

Например, мы можем создать файлы пес.txt и кот.txt командой:

И они будут благополучно созданы.

Но, стоит внутрь фигурных скобок проникнуть пробелу, как начнется нечто несуразное:

Проверим, что вышло:

Мы получили два файла, но с совершенно невообразимыми именами!

Правило 2. При раскрытии фигурных скобок никакой сортировки объектов не происходит, и они интерпретируются в том же порядке, в каком указаны внутри фигурных скобок.

Имеется в виду, конечно, не сортировка файлов в алфавитном или ином порядке; команда ls, при помощи которой мы просматриваем содержимое директорий, автоматически сортирует файлы по алфавиту. Также поступает и любой менеджер файлов, захоти мы просмотреть рабочую директория в графическом интерфейсе. Например, команда touch создает файлы в алфавитном порядке, независимо от того, как мы разместим их в фигурных скобках:

Отключим сортировку в команде ls:

Все равно, файлы создаются в том же порядке.

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

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

Есть случаи, когда это свойство фигурных скобок приобретает важное значение. Скажем, мы решили отредактировать файл /etc/X11/xorg.conf. Перед этим обычно создают его резервную копию. Мы воспользуемся для этого фигурными скобками.

Только пойдем на подстраховку — чтобы не проводить обучение с реальным файлом /etc/X11/xorg.conf, что может закончиться печально, мы создадим в домашней директории папку Опыт:

и сразу перейдем в нее:

Проверим, все ли в порядке:

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

Итак, создадим файл xorg.conf:

Теперь создадим его резервную копию, применяя фигурные скобки:

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

Команда cp запрашивает подтверждения, мы нажимаем ENTER, и дело сделано: файл xorg.conf переписан файлом xorg.conf.bak.

Нужно только не забывать, что шелл интерпретирует команду:

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

Правило 3. При раскрытии фигурных скобок шелл рассматривает все символы внутри фигурных скобок как простые символы, а не как метасимволы или символы регулярных выражений.

Поэтому, хотя команда

Удалит из текущей директории все файлы типа file1, file2, fileN, file_file и подобные,

удалит только два файла file* и file1, то есть астериск (*) будет интерпретирован как простая звездочка.

Правило 4. Если нужно поместить внутри фигурных скобок выражения, содержащие фигурные скобки, или запятые, то необходимо экранировать эти символы обратным слэшем (/), а если нужно ввести сам обратный слэш, то его экранируют вторым обратным слэшем:

Читайте также:  Jquery slim min js

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

Символ "^" используется для экранирования специальных символов, которые по синтаксису несут особую нагрузку. Например, echo ^
Пример:

Экранирование символа %

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

Если используется команда CALL для вызова другой команды, например SET, то в некоторых случаях символ % (наружный) так же дублируется.

Подробнее об этом можно ознакомиться на странице Особенности процедур

Параметры подпрограмм.

Экранирование спецсимволов в операторе FOR

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

Использование круглых скобок

Старайтесь избегать использования круглых скобок в операторе echo. Это связано с тем, что если сам оператор echo находится внутри круглых скобок (составной оператор, например, IF, ELSE, FOR), то синтаксический анализатор может неправильно понять вашу программу и ошибку такого рода будет не так просто найти.
Если душа художника требует использования именно круглых скобок — экранируйте их.

Это же замечание справедливо и для оператора set /p

Более того, как вы думаете, какой результат даст следующая программа ?

Как вы уже догадались, разбор скобок происходит неверно. Будет получено сообщение об ошибке:
Непредвиденное появление: /2
Для правильного разбора оператора set скобки надо экранировать.

Следует отметить, что в самом операторе set /a можно использовать вложенные скобки, например:

Обязательно экранировать скобки необходимо в том случае, если сам оператор SET находится внутри скобок.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Далее кратко описаны полезные возможности, которые можно использовать в командных файлах (*.bat;*.cmd aka батники) операционных систем Windows 2000, XP, 2003 и более поздних.

В этих операционных системах введены существенные расширения возможностей сценариев командной строки, которые позволяют делать, например, следующие вещи:

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

Более подробную помощь нежели в данном обзоре можно найти в стандартной справке в каталоге Windows.
(Типичный путь к файлу справки: C:WINDOWSHelp
tcmds.chm. Если Windows установлена в каталог, отличный от C:WINDOWS, то ссылки на справку из данной страницы работать не будут. Потребуется открыть справку самостоятельно.)
В частности, крайне полезно почитать следующие разделы:

Справку по конкретной команде также всегда можно получить набрав в командной строке " /?".
Например, очень познавательно почитать то, что выдается в результате команд set /?, call /?, for /?, if /?.

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

Вывод
Текущий каталог
Параметры вызова сценариев

Например, после вызова будем иметь следующую картину:

Параметр Значение
%0 d:deltalngscompile_all.cmd
%1 sol.dpr
%2 . (точка)
%3,%4,%5 и т.д. (пусты)
%* sol.dpr .

Современные ОС используют расширенный режим обработки параметров, в котором доступны следующие модификаторы:

Модификатор Описание
расширение %1 и удаление любых кавычек ("")
замена %1 полным путем
замена %1 именем диска
замена %1 путем без диска и имени файла
замена %1 именем файла без расширения
замена %1 расширением имени файла
замена полным путем, содержащим только короткие имена
замена %1 атрибутами файла
замена %1 датой и временем модификации файла
замена %1 размером файла
Поиск в каталогах, перечисленных в переменной среды PATH, замена %1 полным именем первого найденного файла. Если переменная среды не определена или поиск не обнаружил файлов, модификатор выдает пустую строку.

Описанные модификаторы можно применять в различных сочетаниях для всех параметров. Например:

Модификатор Описание
полный путь (включая завершающий слэш) к каталогу выполняемого скрипта
имя файла первого параметра с расширением
размер файла второго параметра
замена %1 строкой, аналогичной результату работы программы dir
Проверка условий

Проверка существования файла:
if [not] exist имя_файла команда [else выражение]
Например: if exist $result$.txt del $result$.txt

Проверка кода возврата:
if [not] errorlevel число команда [else выражение]
Условие верно, если предыдущая обработанная команда завершилась с кодом, равным или большим значения число.
Например:

Использование меток

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

Запуск команд

Инструкция "cmd команда" запускает системный пакетный обработчик cmd.exe для выполнения команды команда.
Если вызов происходит из консоли, то используется имеющаяся, если нет — создается новая.
Ключи /c и /k указывают, что по завершении исполнения консоль нужно закрыть или оставить, соответственно.

Инструкция "start команда" запускает обработку команды команда в отдельном параллельном процессе.
Соответствующие ключи позволяют изменять приоритет запускаемого процесса.
Ключ /wait указывает, что запустившему процессу следует дождаться завершения запущенного.

Читайте также:  Микроволновка sharp инструкция на русском

Запускать новые командные сценарии из командных сценариев можно также двумя способами.
Первый: Второй:

Код возврата команд

Команда exit число прерывает исполнение текущего сценария с возвратом запустившему его процессу заданного кода выхода. По умолчанию производится прерывание сразу всей цепочки вызовов пакетных сценариев. Если необходимо завершить только текущий сценарий и возвратить управление в сценарий, вызвавший его командой call, то нужно использовать ключ /b команды exit. Для выхода из сценария с передачей вызвавшему процессу текущего значения %errorlevel% необходимо использовать команду goto :eof.

Некоторые команды всегда устанавливают переменную %errorlevel%, некоторые модифицируют ее только при возникновении ошибок, а некоторые вообще ее никогда не меняют.
Вот пример:

Копирование

Проверить, удачно ли выполнилась команда можно по коду возврата %errorlevel%.

Использование нескольких команд и символов условной обработки

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

Символ Синтаксис Определение
& [. ] команда1 & команда2 Выполняется первая команда, затем вторая команда.
&& [. ] команда1 && команда2 Вторая команда выполняется, только если первая была выполнена успешно.
|| [. ] команда1 || команда2 Вторая команда выполняется, только если первая не была выполнена (полученный код ошибки превышает ноль).
( ) [. ] ( команда1 & команда2 ) Используется для группировки или вложения команд.
; или , команда1 параметр1 ; параметр2 Используется для разделения параметров команды.

Примечание:
Амперсанд &, вертикальная черта | и скобки () являются специальными символами, которым должен предшествовать управляющий символ ^ или кавычки, если эти символы передаются в качестве аргументов.

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

Использование переменных среды

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

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

Псевдопеременные, такие как %CD%, %DATE%, %TIME%, %RANDOM%, %ERRORLEVEL%, обрабатываются особенным образом в зависимости от определенных условий.

В следующей таблице приведен выборочный список наиболее интересных переменных среды.

Переменная Тип Описание
Локальная Возвращает путь к текущей папке.
Системная Возвращает имя компьютера.
Системная Возвращает текущую дату. Использует тот же формат, что и команда date /t .
Системная Возвращает код ошибки последней использовавшейся команды.
Системная Указывает путь поиска для исполняемых файлов.
Системная Возвращает произвольное десятичное число от 0 до 32767.
Системная Возвращает размещение системного каталога Windows.
и Системная и пользовательская Возвращает временные папки, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP.
Системная Возвращает текущее время. Использует тот же формат, что и команда time /t .
Локальная Возвращает имя пользователя, выполнившего вход в систему.

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

Конструкция Назначение
%PATH:

10,5%

расширит действие переменной среды PATH, затем использует только 5 символов, которые начинаются с 11-го символа (пропустив 10) расширенного результата. Если длина не указана, по умолчанию используется оставшееся значение переменной. Если оба значения (длина и число пропускаемых символов) отрицательны, следующим используемым значением будет длина значения переменной среды, добавленной к указанному значению пропуска или указанной длины. %PATH:

-10%

извлечет последние 10 символов переменной PATH %PATH:

0,-2%

извлечет все символы переменной PATH, за исключением 2-х последних

Для установки значений переменных используется команда set.
Установка значений:
set переменная=значение
Показ значений:
set переменная
Показ значений всех переменных:
set (без параметров)
Проверка наличия переменной с заданным именем:
if defined переменная команда

Вычисление арифметических выражений

В следующей таблице представлены арифметические операторы, поддерживающие параметр /a , в порядке убывания приоритета.

Оператор Действие оператора
() группировка
!

унарные операторы * / % арифметические операторы + — арифметические операторы > двоичный сдвиг & двоичное И ^ двоичное исключающее ИЛИ | двоичное ИЛИ присваивание , разделитель операторов

При использовании символов & | % ^ заключайте выражение в кавычки.
Любые нечисловые строки в выражении считаются именами переменной среды, чьи значения преобразуются в числа до обработки. Если указано имя переменной среды, которое не определено в текущем окружении, ей присваивается значение нуля, что позволяет выполнять арифметические операции со значениями переменной среды без использования % для получения значения.

Пример использования вычисления выражений:

Потоки ввода/вывода

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

В следующей таблице представлены стандартные потоки.

Поток Номер дескриптора Описание
STDIN Стандартный ввод (только чтение)
STDOUT 1 Стандартный вывод (только запись)
STDERR 2 Вывод ошибок (только запись)

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

В следующей таблице представлены стандартные устройства.

Устройство Описание
CON Консоль (чтение с клавиатуры и вывод на экран)
NUL Пустота
PRN Принтер
Читайте также:  Найти адрес прописки по фио

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

В следующей таблице описаны операторы перенаправления, применимые к потокам и устройствам.

Оператор перенаправления Описание
> Перенаправление вывода с затиранием.
Перенаправление ввода.
>> Перенаправление вывода с добавлением.
>& Считывает данные на выходе одного потока как входные данные для другого потока.
Считывает входные данные одного потока как выходные данные другого потока.
| Считывает выходные данные одной команды и записывает их на вход другой команды. Эта процедура известна под названием "канал".

Некоторые команды, такие как find, sort, more, называются фильтрами, т.к. они занимаются специализированной трансформацией входного потока в выходной.

Далее приведены некоторые примеры.

Типичный вызов при тестировании программистских задач.
(Ввод из input.txt, вывод в output.txt, вывод ошибок в никуда).

Вызов скрипта компиляции с перенаправлением потоков вывода и ошибок на дописывание в файл compile.log.

Дописывание содержимого одного файла в конец другого.

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

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

Организация циклов

Команда for позволяет произвести запуск некоторой команды для каждого элемента из заданного множества.
Синтаксис:

Параметры: < % переменная | %% переменная >Обязательный параметр. Замещаемый параметр. Используйте % переменная для выполнения команды for из командной строки. В пакетных файлах для команды FOR используется запись %%переменная вместо %переменная. Имена переменных учитывают регистр букв (%i отличается от %I). ( множество ) Обязательный параметр. Задает один или несколько файлов, каталогов, диапазон значений или текстовых строк, подлежащих обработке заданной командой. Скобки являются обязательными. команда Обязательный параметр. Задает команду, которая будет выполнена для каждого файла, каталога диапазона значений или текстовой строки, включенной в указанный параметр ( множество ) . ПараметрыКоманднойСтроки Задает параметры командной строки, которые используются с указанной командой.
Подробнее команда описана в справке. Здесь приведены несколько примеров, иллюстрирующих ее возможности.

Перебор фиксированного множества параметров.

Итерация по файлам.

Итерация по каталогам.

Итерация и разбор файлов

Набор содержит имена одного или нескольких файлов, которые по очереди открываются, читаются и обрабатываются. Обработка состоит в чтении файла, разбивки его на отдельные строки текста и выделения из каждой строки заданного числа подстрок (в том числе нуля). Затем найденная подстрока используется в качестве значения переменной при выполнении основного тела цикла. По умолчанию ключ /F выделяет из каждой строки файла первое слово, очищенное от окружающих его пробелов. Пустые строки в файле пропускаются. Необязательный параметр "options" служит для переопределения заданных по умолчанию правил обработки строк.
Возможные ключевые слова для этого параметра:

Описание
eol=c Задает символ конца строки (только один символ).
skip=n Задает число строк, пропускаемых в начале файла.
delims=xxx Задает набор разделителей. Заменяет набор разделителей по умолчанию, состоящий из пробела и символа табуляции.
Задает элементы, передаваемые из каждой строки в тело цикла for при каждой итерации. В результате размещаются дополнительные имена переменных. Форма m-n задает диапазон, указывающий элементы с m -го по n -ый. Если последним символом строки tokens= является звездочка (*), то размещается дополнительная переменная, в которую помещается остаток строки после разбора последнего элемента.
usebackq Задает возможность использования кавычек для имен файлов в параметре МножествоИменФайлов . Задает исполнение строки, заключенной в обратные кавычки, как команды, а строки в одиночных кавычках — как команды в символьной строке.

Поясняющий пример:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Эта команда обрабатывает файл myfile.txt, пропускает все строки, которые начинаются с символа точки с запятой, и передает вторую и третью подстроки из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или пробелами. В теле цикла переменная %i используется для второй подстроки, %j — для третьей, а %k получает все оставшиеся подстроки после третьей. Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки. Для того чтобы использовать двойные кавычки, необходимо использовать параметр usebackq, иначе двойные кавычки будут восприняты как границы строки для обработки.

Синтаксис команды FOR /F также позволяет обработать отдельную строку, с указанием параметра filenameset, заключенным в одиночные кавычки. Строка будет обработана как единая строка из входного файла.

Наконец, команда FOR /F позволяет обработать строку вывода другой команды. Для этого следует ввести строку вызова команды в апострофах вместо набора имен файлов в скобках. Строка передается для выполнения обработчику команд CMD.EXE, а вывод этой команды записывается в память и обрабатывается так, как будто строка вывода взята из файла. Например, следующая команда:
FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i
выведет перечень имен всех переменных среды, определенных в настоящее время в системе.

Еще один пример:

Организация блокировок
Установка цвета консоли

(CopyLeft) Vadim Kopichenko

Ссылка на основную публикацию
Сетевой город 71 щекино школа 12
Запрошенная Вами страница не найдена. Возможно, Вы перешли по устаревшей ссылке или неверно ввели адрес. 2019 Электронное образование Министерство по...
Самый лучший музыкальный центр по звуку
На первый взгляд, сегодня мало кому в голову придет купить музыкальный центр себе домой, когда прослушивать музыку можно, просто подключив...
Самый лучший плеер для виндовс 7
Чтобы просмотр фильмов или прослушивание музыки за компьютером было действительно комфортным, необходимо скачать по-настоящему качественный проигрыватель. Ниже представлена подборка из...
Сетевой драйвер для ноутбука асер
Драйвера для ноутбуков и нетбуков Acer Поддерживаемые операционные системы: Windows 7 Для начала загрузки данного файла, найдите под пунктом номер...
Adblock detector