Содержание

отображение и изменение переменных среды окружения Windows

&nbsp &nbsp Команда SET используется для просмотра и изменения переменных среды окружения в командной строке Windows. Переменные окружения — это переменные, принимаемые значения которых характеризуют среду, в которой выполняется текущая программа — пути системных файлов, сведения об аппаратных средствах, каталоги пользователя и т.п. Значения переменных среды формируются в процессе загрузки Windows, регистрации пользователя в системе, при выполнении отдельных процессов или с помощью команды SET. Для просмотра значения, принимаемого конкретной переменной можно воспользоваться командой :

SET переменная
SET PATH — отобразить значение переменной PATH
Для создания новой переменной, или изменения значения существующей, используется команда :

SET переменная=строка

переменная — Имя переменной среды.


строка — Строка символов, присваиваемая указанной переменной.

SET MyName=Vasya — установить значение переменной MyName

SET path=C:\progs;%path% — изменить значение переменной PATH, добавив в начало строки C:\progs

Значение, принимаемое переменной , доступно для обработки в командных файлах, при использовании ее имени, заключенного в знаки процента — % . Например команда выдачи текста на дисплей ECHO в виде:

ECHO date — выведет на экран слово «date», а команда
ECHO %date% выведет на экран значение переменной date, т.е. текущую дату в формате операционной системы.

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

ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Usr\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=TEST7
ComSpec=C:\windows\system32\cmd. exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Users\Usr
LOCALAPPDATA=C:\Users\Usr\AppData\Local
LOGONSERVER=\\TEST7
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\windows\system32;C:\windows;
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS; .VBE;.JS;.JSE;.WSF;.WSH;.MSC

PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\windows\system32\Windows PowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SystemDrive=C:
SystemRoot=C:\windows
TEMP=C:\Users\Usr\AppData \Local\Temp
TMP=C:\Users\Usr\AppData \Local\Temp
USERDOMAIN=test7
USERNAME=Usr
USERPROFILE=C:\Users\Usr
windir=C:\windows

Кроме переменных, отображаемых в списке, при вызове команды SET, существуют и другие, значения которых изменяется динамически:

%CD% — принимает значение текущего каталога.
%DATE% — принимает значение текущей даты.
%TIME% — принимает значение текущего времени.
%RANDOM% — значение случайного числа в диапазоне между 0 и 32767.
%ERRORLEVEL% — текущее значение ERRORLEVEL, специальной переменной, которая используется в качестве признака результата выполнения программы.
%CMDEXTVERSION%

значение версии расширенной обработки команд CMD.EXE.
%CMDCMDLINE% — раскрывается в исходную командную строку, которая вызвала командный процессор .

Если при вызове команды SET указать только часть имени, то будет выведен список переменных, имена которых начинаются с указанной строки. Например:

SET U — выведет значения всех переменных, имена которых начинаются с ‘U’.

Команда SET поддерживает два дополнительных ключа:

SET /A выражение

SET /P variable=[promptString]

Ключ /A указывает, что строка справа от знака равенства является числовым выражением, значение которого вычисляется.


|
=
,
— группировка
— арифметические операторы
— арифметические операторы
— двоичный сдвиг
— двоичное И
— двоичное исключающее ИЛИ
— двоичное ИЛИ
— присвоение
— разделитель операторов

При использовании любых логических или двоичных операторов необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении рассматриваются как имена переменных среды, значения которых преобразуются в числовой вид перед использованием. Если переменная с указанным именем не определена в системе, вместо нее подставляется нулевое значение. Это позволяет выполнять арифметические операции со значениями переменных среды, причем не нужно вводить знаки % для получения значений. Если команда SET /A вызывается из командной строки, а не из пакетного файла, она выводит окончательное значение выражения.

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

0x — для шестнадцатеричных чисел
0 — для восьмеричных чисел.

Пример использования префиксов:

SET /A REZ=0xA+012
ECHO %REZ%

В данном командном файле значение переменной REZ вычисляется сложением числа 10, представленного в шестнадцатеричном виде ( 0xA ) и числа 10 , представленного в восьмеричном ( 012 ).

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

@ECHO OFF
SET /P NAME=Введите имя пользователя:
SET /P pass=Введите пароль:
ECHO Имя пользователя — %NAME% , Пароль — %PASS%

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

переменная:строка1=строка2 — заменяет в принимаемом значении переменной строку1 на строку2

Следующий командный файл использует замену символа «точка» на символ «тире» в значении переменной, соответствующем текущей дате:

@ECHO OFF

set tm=%DATE%
ECHO Дата1 = %tm%
SET tm=%DATE:. =-%
ECHO Дата2 = %tm%

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

переменная:~x,y — где x — число пропускаемых символов от начала строки, а y — количество символов, используемых в качестве значения переменной.

Следующий пример использует отображение текущего времени без секунд и долей секунд (только первые 5 символов из стандартного значения переменной TIME):

@ECHO OFF
set tm=%TIME%

ECHO Время1 = %tm%
SET tm=%TIME:~0,5%
ECHO Время2 = %tm%

Если значение y ( длина ) не указана, то используется оставшееся до конца строки значение переменной. Если значение y отрицательно, то используется часть строки значения переменной от конца. Предыдущий пример можно изменить , указав, что в принимаемом значении времени отбрасываются 6 символов от конца:

@ECHO OFF
set tm=%TIME%
ECHO Время1 = %tm%
SET tm=%TIME:~0,-6%
ECHO Время2 = %tm%

Возможно использование число пропусков не задано, и используется отрицательное число, то принимаемое значение будет частью переменной от конца строки:

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

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

%PATH:~0,-2% эквивалентно %PATH:~,-2%

При использовании переменных окружения в командных файлах существует определенное ограничение, связанное с тем фактом, что присваиваемое значение остается без изменения при его модификации внутри группы команд, задаваемой скобками, например в командах IF или FOR . Для обхода данного ограничения используется запуск командного процессора с параметром /V:ON и вместо знаков процента, для получения принимаемого переменной значения, используются восклицательные знаки. Кроме того, существует возможность использовать стандартный запуск командного процессора, но с локальным включением данного режима командой :

Setlocal EnableDelayedExpansion

Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:

Setlocal EnableDelayedExpansion
@ECHO OFF
set VAR=before
if «%VAR%» == «before» (
set VAR=after
if «!VAR!» == «after» @echo Со знаком процента=%VAR% , Со знаком вопроса=!VAR!
)

Команда set VAR=after выполняется внутри подпрограммы, ограниченной скобками и, если убрать команду Setlocal EnableDelayedExpansion или не использовать для получения значения переменной VAR восклицательные знаки, ее значение останется старым ( тем, что было установлено до входа в подпрограмму ). Аналогичная же проблема наблюдается и тогда, когда значение переменной изменяется внутри цикла команды FOR. Например, для получения списка файлов текущего каталога такой командный файл не будет работать:

set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%

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

Setlocal EnableDelayedExpansion
set LIST=
for %%i in (*) do set LIST=!LIST! %%i
echo %LIST%

Теперь, значение переменной LIST внутри цикла FOR будет изменяться, последовательно принимая значения имен файлов, разделенных пробелом ( set LIST=!LIST! %%i)

Статья — Переменные в CMD, команда SET и арифметика | SafeZone

Статья от 22.12.2011
Автор: Ris и Гимаев Наиль
Источник​

Переменные. 17)-1)

set /a random10=%random%/3277

Выводит случайное число от 0 до 9.
У меня это число по нелепой псевдослучайности цифру секунды
%CD% — раскрывается в строку текущей директории.
%DATE% — раскрывается в текущую дату, используя тот же формат команды DATE.
%TIME% — раскрывается в текущую дату, используя формат команды TIME.
%ERRORLEVEL% — раскрывается в текущее значение ERRORLEVEL.
Уровень ошибки, 0 — это нет ошибки, 1 — это есть ошибка, а другие это номера ошибки.

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

Операции со строковыми или численными переменными

Соединение 2-ух строковых переменных

set x=Gaz
set y=Prom
echo %x%%y%
(GazProm)

Вывод определенного(ых) символа(ов) из строки

Символы номеруются начиная с 0!
set str=babywka

Вывод 1-ого символа

echo %str:~0,1%
(b)

Вывод 3-х символов с конца строки

echo %str:~-3%
(wka)

Вывод всей строки кроме 2-ух первых символов

echo %str:~2%
(bywka)

Вывод всей строки кроме 2-ух последних символов

echo %str:~0,-2%
(babyw)

Вывод 3-х символов начиная с 3

echo %str:~2,3%
(byw)

Удаление подстроки из строки

set str=babywka
echo %str:ba=%
(bywka)

Замена подстроки из строки на другую подстроку

set str=babywka
echo %str:bab=xlop%
(xlopywka)

Удаление кавычек(«) из строки

set str2="qwerty"
echo %str2:"=%
(qwert)

В данном случае: если кавычки в начале и конце строки — можно юзать

echo %str2:~1,-1%
(qwert)

Существуют 2 способа использовать переменную в переменной, например:

вывод n-ого символа

Первый способ с call set

call set x=%%str:~%n%,1%%
echo %x%

Второй способ с for и setlocal enabledelayedexpansion

setlocal enabledelayedexpansion
for /l %%i in (%n%,1,%n%) do (set x=!str:~%%i,1!)
echo %x%

тут неважно что в for писать, главное

set x=!str:~%n%,1!

писать в do
С циклами мы разберемся в следующей статье.
Но, пока уточню: если код второго способа юзать в пакетном файле (BATнике), то вместо %i юзаем %%i.

Операции с числовыми переменными

Увеличивание на единицу

set /a x+=1

Увеличивание в 2 раза

set /a x+=%x%

аналогично

set /a x*=2

Возведение в квадрат

set /a x*=%x%

Возведение в куб

set /a x=%x%*%x%*%x%

Деление
Деление в CMD является целочисленным!(то есть делится до целого числа)

set /a x=15
set /a y=4
set /a xy=%x%/%y%
(3)

Сложение

set /a x=5
set /a y=-6
set /a xy=%x%+%y%
(5+(-6)=5-6=-1)

Вычитание

set /a x=5
set /a y=-6
set /a xy=%x%-%y%
(5-(-6)=5+6=11)

Вычисление остатка от деления

set /a xy=%x% "%" %y%

(при записи в батник, процент «%» нужно удваивать «%%»)

Унарные операторы

Логическое отрицание (Logical NOT)

set /a y="!"%x%

дает результат(%y%)1 (True), если переменная(%x%) равна 0 (False), и 0 (False)(%y%) в любых других случаях

Например
set /a x=5
set /a y="!"%x%
(0)
set /a x=0
set /a y="!"%x%
(1)

Побитовая инверсия (Bitwise NOT):

set /a y="~"%x%

дает результат -1-%x%(%y%)
Например

set /a x=5
set /a y="~"%x%
(-1-5=-(1+5)= -6)
set /a x=-3
set /a y="~"%x%
(-1-(-3)=-1+3=3-1= 2)

Унарный минус (устанавливает/сбрасывает знаковый бит)

set /a y="-"%x%

дает результат 0-%x%(%y%)
Например

set /a x=5
set /a y="-"%x%
(-5)
set /a x=-3
set /a y="-"%x%
(3)

Двоичные операторы

set x=3
(в двоичной системе счисления - 0011)
set y=5
(в двоичной системе счисления - 0101)

Побитовое И (AND)

Побитовое И — это бинарная операция, действие которой эквивалентно применению логического И к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 1, результирующий двоичный разряд равен 1; если же хотя бы один бит из пары равен 0, результирующий двоичный разряд равен 0.

set /a xy=%x%"&"%y%
(1, в двоичной системе счисления - 0001)

Побитовое ИЛИ (OR)

Побитовое ИЛИ — это бинарная операция, действие которой эквивалентно применению логического ИЛИ к каждой паре битов, которые стоят на одинаковых позициях в двоичных представлениях операндов.
Другими словами, если оба соответствующих бита операндов равны 0, двоичный разряд результата равен 0; если же хотя бы один бит из пары равен 1, двоичный разряд результата равен 1.

set /a xy=%x%"|"%y%
(7, в двоичной системе счисления - 0111)

Побитовое исключающее ИЛИ (XOR)

Побитовое исключающее ИЛИ (или побитовое сложение по модулю два) — это бинарная операция, действие которой эквивалентно применению логического исключающего ИЛИ к каждой паре битов, которые стоят на

одинаковых позициях в двоичных представлениях операндов. «%y% (6, в двоичной системе счисления — 0110)

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

Двоичный арифметический сдвиг

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

Вправо

set /a xy=%x%">>"1
(1, в двоичной системе счисления - 0011->0001)
set /a xy2=%y%">>"1
(2, в двоичной системе счисления - 0101->0010)
set /a n=13
(в двоичной системе счисления - 1101)
set /a xn=%n%">>"2
(3, в двоичной системе счисления - 1101->0011)
set /a my=-%y%">>"1
(-3, в двоичной системе счисления - 1011(-5)->1101(-3))

Влево

set /a xy=%x%"<<"1
(6, в двоичной системе счисления - 0011->0110)
set /a xy2=%y%"<<"1
(10, в двоичной системе счисления - 0101->1010)
set /a xy3=%y%"<<"4
(80, в двоичной системе счисления - 0101->1010000)
set /a my=-%y%"<<"1
(-10, в двоичной системе счисления - 1011(-5)->10110(-10))

Максимальный размер отдельной переменной среды составляет 8192 байта. (у меня выходило только 8184, наверное это вместе с названием…)
Максимальный общий размер всех переменных среды, включая имена переменных и знак равенства, составляет 65 536 Кбайт.

И я забыл, про 8-ричную и 16-ричную систему счисления в CMD

Системы счисления

Числовые значения рассматриваются как десятичные, если перед ними не стоит префикс 0x для шестнадцатеричных чисел, и 0 для восьмеричных чисел. Например, числа 0x12, и 022 обозначают десятичное число 18.

Обратите внимание на запись восьмеричных числе: 08 и 09 не являются допустимыми числами, так как в восьмеричной системе исчисления цифры 8 и 9 не используются.

Восьмеричная система счисления

set /a x=022
(Это 22 в восьмеричной системе счисления, и 18 в десятичной)

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

set /a xy=022+07
(Это 22+7=31 в восьмеричной системе счисления, и 31 в десятичной)

Шестнадцатеричная система счисления

set /a x=0x3A
(Это 3A в восьмеричной системе счисления, и 58 в десятичной)

Вычитание

set /a xy=0x3A-0x66
(Это 3A-66=-54 в восьмеричной системе счисления, и -44 в десятичной)

Сохранение в переменной вывода программы
К сожаление, передача вывода программ на вход команды set не работает:

echo 1|set /p AA=""
set AA

Поэтому можно воспользоваться временным сохранением в файл:

echo 1> 0. <rar.log.tmp') do @echo %%J >rarfilename.tmp
set /p rarfilename="" <rarfilename.tmp
del rarfilename.tmp

Узнать имя последнего изменённого файла в папке:

dir /b /a-d /o-d *.* >%temp%\0.tmp
set /p lastfile="" <%temp%\0.tmp
del %temp%\0.tmp
echo "%lastfile%"

Комментарий от Dragokas :
По сути эта команда считывает в переменную первую строку файла:

set /p stroka=<file.txt

Комментарий от m00slim25:
Эти операции, как и все остальные, поддерживают кавычный синтаксис:

set /a "y=!%x%"
set /a "y=~%x%"
set /a "y=-%x%"

Оператор == используется только для строчного сравнения. Кавычки необходимы если в переменной/операнде имеются пробелы.
Для арифметического сравнения необходимо использовать арифметические операторы:
EQU : Равно (=)
NEQ : Не равно (!=)
LSS : Меньше (<)
LEQ : Меньше или равно (<=)
GTR : Больше (>)
GEQ : Больше или равно (>=)
Использовать операторы, указанные в скобках, не представляется возможным, потому что, например, операторы < и > являются указателями перенаправления ввода-вывода.

Cmd if else примеры — Сборка-Доработка

Формат командной строки:

IF [NOT] ERRORLEVEL число команда

IF [NOT] строка1==строка2 команда

IF [NOT] EXIST имя_файла команда

NOT — Указывает, что Windows должна выполнить эту команду, только если условие является ложным.

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

строка1==строка2 — Условие является истинным, если указанные строки совпадают.

EXIST имя_файла — Условие является истинным, если файл с указанным именем существует.

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

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

IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)

Следующий пример содержит ОШИБКУ, поскольку команда del должна заканчиваться переходом на новую строку:

IF EXIST имя_файла. del имя_файла. ELSE echo имя_файла. Missing

Следующий пример также содержит ОШИБКУ, поскольку команда ELSE должна располагаться в той же строке, что и команда, следующая за IF:

IF EXIST имя_файла. del имя_файла.
ELSE echo имя_файла. missing
Вот правильный пример, где все команды расположены в одной строке:

IF EXIST имя_файла. (del имя_файла.) ELSE echo имя_файла. Missing

Изменение команды IF при включении расширенной обработки команд:

IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда

где оператор_сравнения принимает следующие значения:

EQU — равно
NEQ — не равно
LSS — меньше
LEQ — меньше или равно
GTR — больше
GEQ — больше или равно,

а ключ /I , если он указан, задает сравнение текстовых строк без учета регистра. Ключ /I можно также использовать и в форме строка1==строка2 команды IF. Сравнения проводятся по общему типу данных, так что если строки 1 и 2 содержат только цифры, то обе строки преобразуются в числа, после чего выполняется сравнение чисел.

Условие CMDEXTVERSION применяется подобно условию ERRORLEVEL, но значение сравнивается с внутренним номером версии текущей реализации расширенной обработки команд. Первая версия имеет номер 1. Номер версии будет увеличиваться на единицу при каждом добавлении существенных возможностей расширенной обработки команд. Если расширенная обработка команд отключена, условие CMDEXTVERSION никогда не бывает истинно.

Условие DEFINED применяется подобно условию EXIST , но принимает в качестве аргумента имя переменной среды и возвращает истинное значение, если эта переменная определена.

Строка %ERRORLEVEL% будет развернута в строковое представление текущего значения кода ошибки ERRORLEVEL, за исключением ситуации, когда уже имеется переменная среды с именем ERRORLEVEL; в подобном случае подставляется значение этой переменной. Например, с помощью данной строки можно выполнить следующее:

goto answer%ERRORLEVEL%
:answer0
echo Получен код возврата 0
:answer1
echo Получен код возврата 1

Допускается и применение описанных выше операторов числового сравнения:

IF %ERRORLEVEL% LEQ 1 goto okay

Строка %CMDCMDLINE% будет развернута в исходную командную строку, переданную CMD.EXE до любой обработки, за исключением ситуации, когда уже определена переменная среды с именем CMDCMDLINE; в подобном случае подставляется значение этой переменной.

Строка %CMDEXTVERSION% будет развернута в строку, представляющую собой текущее значение CMDEXTVERSION, за исключением ситуации, когда уже имеется переменная среды с именем CMDEXTVERSION; в подобном случае подставляется значение этой переменной.

Создание пустого файла, имя которого задается параметром командной строки.

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


@echo off
REM Проверить наличие имени файла, задаваемого в качестве параметра %1
REM Если параметр %1 пустой – переход на метку error
if «%1» EQU «» goto error
REM Если параметр задан, создаем пустой файл, копированием из устройства nul
copy nul «%1»
exit
:error
ECHO File name required ! Must be — %

n0 filename. ext
:exit

Командный файл, выполняющий опрос командой ping сетевых адресов в заданном диапазоне ( 192.168.1.1 – 192.168.1.254 ). Команда ping формирует значение переменной ERRORLEVEL равное нулю, если верно заданы параметры командной строки. То есть, определить доступность пингуемого IP-адреса методом анализа кода возврата ping не получится, поскольку он будет нулевым, независимо от того, отвечает ли пингуемое устройство, или нет. Поэтому, для решения данной задачи необходимо определить характерный признак, который присутствует в выводимых результатах только в том случае, когда пингуемое устройство доступно. Таким признаком может быть наличие строки символов «TTL» в выводе команды ping. Для определения признака можно использовать команду find в цепочке с командой ping .

Примеры вывода для отвечающего и не отвечающего узлов:

Ответ от 192.168.1.1: число байт=32 время=1мс TTL=64 — если устройство с данным IP-адресом доступно;
Превышен интервал ожидания для запроса. — если устройство не отвечает;

Команда find /I «TTL» возвращает код ERRORLEVEL равный 0 , если строка «TTL» присутствует в результате выполнения ping . Ключ /I имеет смысл использовать, чтобы результат не зависил от того, строчные или заглавные символы составляют строку «ttl».
Результат работы командного файла записывается в текстовый файл iplist.txt

@ECHO OFF
REM Постоянная часть IP-адреса
set IPTMP=192.168.1.
REM Количество пингуемых узлов
set N=254
rem С какого адреса начать — начальное значение » хвоста » IP- адреса X.X.X.IPMIN
set /A IPMIN=1
ECHO %DATE% Опрос пингом %N% адресов начиная с %IPTMP%%IPMIN% >> iplist.txt
rem M0 — метка для организации цикла
:M0
rem Переменная IPFULL — полное значение текущего IP-адреса
set IPFULL=%IPTMP%%IPMIN%
rem Если » хвост «больше N – перейти к завершению работы
IF %IPMIN% GTR %N% GOTO ENDJOB
ping -n 1 %IPFULL% | find /I «TTL»
if %ERRORLEVEL%==0 Echo %IPFULL% >> iplist. txt
rem Сформируем следующий IP-адрес
set /A IPMIN=%IPMIN% + 1
rem Перейдем на выполнение следующего шага
GOTO M0
rem Завершение работы
:endjob
exit

Существуют некоторые особенности реализации командного интерпретатора CMD.EXE , которые необходимо учитывать при обработке значений переменных внутри циклов IF и FOR . Использование значений переменных внутри скобок, требует изменения стандартного режима интерпретации командного процессора. Разработчиками предусмотрена возможность запуска CMD.EXE с параметром /V:ON , что включает разрешение отложенного расширения переменных среды с применением символа восклицательного знака ( ! ) в качестве разделителя. То есть, параметр /V:ON разрешает использовать !var! в качестве значения переменной var во время выполнения внутри циклов команд FOR и IF . Но на практике чаще используется возможность локального включения данного режима внутри командного файла специальной директивой:

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

FOR … (
IF !ERRORLEVEL!==0 вместо %ERRORLEVEL%==0

)

&nbsp &nbsp В русскоязычной справке команды IF имеется ошибка, которая много лет переходит из версии в версию — вместо оператора EQU — равно , указано EQL — равно

Обработка условий в пакетных программах

Синтаксис

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

Параметры

not Задает выполнение команды только в случае невыполнения условия. errorlevelчисло Условие выполняется, если предыдущая команда, обработанная интерпретатором команд Cmd.exe, завершилась с кодом, равным или большим числа. команда Команда, которая должна быть обработана в случае выполнения условия. строка1==строка2 Условие выполняется, если строки строка1 и строка2 совпадают. Строки могут быть заданы явно или могут быть пакетными переменными (например, %1). Явно заданные строки нет необходимости заключать в кавычки. existимя_файла Условие выполняется, если существует файл с именем имя_файла. оп_сравнения Трехзначный оператор сравнения. В следующей таблице перечислены допустимые значения оп_сравнения.

ОператорОписание
EQUравно
NEQне равно
LSSменьше
LEQменьше или равно
GTRбольше
GEQбольше или равно

/i Сравнение строк без учета регистра знаков. Параметр /i можно использовать в конструкции string1==string2 команды if. Эти сравнения являются общими. Если и строка1, и строка2 состоят из цифр, строки преобразовываются в числа и выполняется сравнение чисел. cmdextversion число Условие выполняется, только если номер внутренней версии, связанный с расширениями командного процессора Cmd.exe, равен или больше числа. первая версия имела номер 1. Номер версии увеличивается на 1 при внесении в расширения командного процессора значительных изменений. Условие с cmdextversion не выполняется, если расширения командного процессора запрещены (по умолчанию они разрешены). defined переменная Условие выполняется, если переменная определена. выражение Команда и все ее параметры для обработке в командной строке при выполнении оператора else. /? Отображение справки в командной строке.

Заметки

  • Если условие, заданное в команде if, выполняется, будет выполнена команда, следующая за условием. Если условие не выполняется, команда, заданная в операторе if, пропускается, а управление переходит к команде оператора else, если она задана.
  • Когда программа завершается, она возвращает код завершения. С помощью параметра errorlevel коды завершения можно использовать в качестве условий.
  • Использование команды definedпеременная

При использовании команды defined переменная добавляются следующие три переменные: %errorlevel%, %cmdcmdline% и %cmdextversion%.

%errorlevel% замещается строковым представлением текущего значения errorlevel, если только уже не существует переменная среды с именем ERRORLEVEL. В этом случае будет использовано ее значение. В следующем примере показано использование значения errorlevel после выполнения пакетной программы:

Операторы сравнения оп_сравнения также можно использовать следующим образом:

%cmdcmdline% замещается исходной командной строкой, переданной Cmd. exe, до ее обработки в Cmd.exe, если только уже не существует переменная среды с именем cmdcmdline. В этом случае будет использовано значение cmdcmdline.

%cmdextversion% замещается строковым представлением текущего значения cmdextversion, если только уже не существует переменная среды с именем CMDEXTVERSION. В этом случае будет использовано ее значение.

Использование оператора else

Оператор else должен размещаться в той же строке, что и команда if. Пример:

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

Приведенный ниже пример не будет работать, поскольку команда else должна находиться в той же строке, что и команда if:

Если необходимо разместить всю инструкцию в одной строке, можно использовать следующую правильную форму исходной инструкции:

Примеры

Если файл Product.dat не удается найти, появится следующее сообщение:

Если в приведенном ниже примере при форматировании диска в дисководе A возникнет ошибка, будет выведено сообщение об ошибке:

Если ошибка не возникнет, сообщение об ошибке выведено не будет.

Команда if не может быть использована непосредственно для проверки существования каталога, но в каждом каталоге существует устройство (NUL). Следовательно, существование каталога может быть проверено, как показано ниже. В следующем примере проверяется наличие каталога:

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

Conditionally perform a command.

IF will only parse numbers when one of (EQU, NEQ, LSS, LEQ, GTR, GEQ) is used.
The == comparison operator always results in a string comparison.

ERRORLEVEL

There are two different methods of checking an errorlevel, the first syntax ( IF ERRORLEVEL . ) provides compatibility with ancient batch files from the days of Windows 95.
The second method is to use the %ERRORLEVEL% variable providing compatibility with Windows 2000 or newer.

IF ERRORLEVEL n statements should be read as IF Errorlevel >= number
i. e.
IF ERRORLEVEL 0 will return TRUE whether the errorlevel is 0, 1 or 5 or 64
IF ERRORLEVEL 1 will return TRUE whether the errorlevel is 1 or 5 or 64
IF NOT ERRORLEVEL 1 means if ERRORLEVEL is less than 1 (Zero or negative).
This is not very readable or user friendly and does not easily account for negative error numbers.

Using the %ERRORLEVEL% variable is a more logical method of checking Errorlevels:

IF %ERRORLEVEL% NEQ 0 Echo An error was found
IF %ERRORLEVEL% EQU 0 Echo No error found

IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found)
IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found

This allows you to trap errors that can be negative numbers, you can also test for specific errors:
IF %ERRORLEVEL% EQU 64 .

To deliberately raise an ERRORLEVEL in a batch script use the EXIT /B command.

It is possible (though not a good idea) to create a string variable called %ERRORLEVEL% (user variable)
if present such a variable will prevent the real ERRORLEVEL (a system variable) from being used by commands such as ECHO and IF.

Test if a variable is empty

To test for the existence of a command line parameter — use empty brackets like this

IF [%1]==[] ECHO Value Missing
or
IF [%1] EQU [] ECHO Value Missing

When comparing against a variable that may be empty, we include a pair of brackets [ ] so that if the variable does happen to be empty the IF command still has something to compare: IF [] EQU [] will return True.

You can in fact use almost any character for this a ‘

‘ or curly brackets, < >or even the number 4, but square brackets tend to be chosen because they don’t have any special meaning.
When working with filenames/paths you should always surround them with quotes, if %_myvar% contains «C:Some Path» then your comparison becomes IF [«C:Some Path»] EQU []
if %_myvar% could contain empty quotes, «» then your comparison should become IF [%_myvar%] EQU [«»]

if %_myvar% will never contain quotes, then you can use quotes in place of the brackets IF «%_myvar%» EQU «»
However with this pattern if %_myvar% does unexpectedly contain quotes, you will get IF «»C:Some Path»» EQU «» those doubled quotes, while not officially documented as an escape will still mess up the comparison.

Test if a variable is NULL

In the case of a variable that might be NULL — a null variable will remove the variable definition altogether, so testing for a NULL becomes:

IF NOT DEFINED _example ECHO Value Missing

IF DEFINED will return true if the variable contains any value (even if the value is just a space)

To test for the existence of a user variable use SET VariableName , or IF DEFINED VariableName

Test the existence of files and folders

IF EXIST filename Will detect the existence of a file or a folder.

The script empty.cmd will show if the folder is empty or not (this is not case sensitive).

Parenthesis

Parenthesis can be used to split commands across multiple lines. This enables writing more complex IF… ELSE… commands:

When combining an ELSE statement with parentheses, always put the opening parenthesis on the same line as ELSE.
) ELSE ( This is because CMD does a rather primitive one-line-at-a-time parsing of the command.

When using parentheses the CMD shell will expand [read] all the variables at the beginning of the code block and use those values even if the variables value has just been changed. Turning on DelayedExpansion will force the shell to read variables at the start of every line.

Pipes

When piping commands, the expression is evaluated from left to right, so

IF SomeCondition Command1 | Command2 is equivalent to:

(IF SomeCondition Command1 ) | Command2
The pipe is always created and Command2 is always run, regardless whether SomeCondition is TRUE or FALSE

You can use brackets and conditionals around the command with this syntax:

IF SomeCondition (Command1 | Command2)
If the condition is met then Command1 will run, and its output will be piped to Command2.

The IF command will interpret brackets around a condition as just another character to compare (like # or @) for example:
IF (%_var1%==(demo Echo the variable _var1 contains the text demo

Placing an IF command on the right hand side of a pipe is also possible but the CMD shell is buggy in this area and can swallow one of the delimiter characters causing unexpected results.
A simple example that does work:

Echo Y | IF red==blue del *.log

Chaining IF commands (AND).

The only logical operator directly supported by IF is NOT , so to perform an AND requires chaining multiple IF statements:

If either condition is true (OR)

This can be tested using a temporary variable:

Set «_tempvar=»
If SomeCondition Set _tempvar=1
If SomeOtherCondition Set _tempvar=1
if %_tempvar% EQU 1 Command_to_run_if_either_is_true

Delimiters

If the string being compared by an IF command includes delimiters such as [Space] or [Comma], then either the delimiters must be escaped with a caret ^ or the whole string must be «quoted».
This is so that the IF statement will treat the string as a single item and not as several separate strings.

Test Numeric values

IF only parses numbers when one of the compare-op operators ( EQU, NEQ, LSS, LEQ, GTR, GEQ ) is used.
The == comparison operator always results in a string comparison.

This is an important difference because if you compare numbers as strings it can lead to unexpected results: «2» will be greater than «19» and «026» will be less than «10».

Correct numeric comparison:
IF 2 GEQ 15 echo «bigger»

Using parentheses or quotes will force a string comparison:
IF (2) GEQ (15) echo «bigger»
IF «2» GEQ «15» echo «bigger»

This behaviour is exactly opposite to the SET /a command where quotes are required.

Wildcards

Wildcards are not supported by IF, so %COMPUTERNAME%==SS6* will not match SS64

A workaround is to retrieve the substring and compare just those characters:
SET _prefix=%COMPUTERNAME:

0,3%
IF %_prefix%==SS6 GOTO they_matched

If Command Extensions are disabled IF will only support direct comparisons: IF ==, IF EXIST, IF ERRORLEVEL
also the system variable CMDEXTVERSION will be disabled.

IF does not, by itself, set or clear the Errorlevel.

IF is an internal command.

You see things; and you say ‘Why?’ But I dream things that never were; and I say ‘why not?’

George Bernard Shaw

Using parentheses to group and expand expressions.
Conditional execution syntax (AND / OR)
SET — Display or Edit environment variables.
ECHO — Display message on screen.
EXIT — Set a specific ERRORLEVEL.
IFMEMBER — group member (Resource kit).
SC — Is a Service running (Resource kit).
Powershell: if — Conditionally perform a command.
Equivalent bash command (Linux): if — Conditionally perform a command.

Встроенная команда set — bash-hackers.org translate

Синопсис

set [--abefhkmnptuvxBCHP] <-o OPTIONNAME> [-][--] <POSPARAMS>

Описание

set

  • устанавливает атрибуты оболочки с помошью коротких опций

  • устанавливает атрибуты оболочки с помошью длинных опций

Запущенный без опций set показывает все shell-переменные и переменные среды (только в POSIX-режиме) в формате NAME=VALUE

Атрибуты

Атрибуты показанные ниже включаются так -X , а выключаются +X. (Такая перевернутая схема включения/выключения пришла в bash исторически, т.к. опции обычно включались в виде -X. Прямо как с электрическим зарядами)

Флаг
Название опцииОписание
-aallexportАвтоматически отмечает измененные переменные.
Automatically mark new and altered variables to be exported to subsequent environments.
-bnotifyНе ждет нажатия enter чтобы оповестить о завершившемся в фоне job-е. (Оповещения работают только для управления job-ами)
-eerrexitWhen set, the shell exits when a simple command in a command list exits non-zero (FALSE). This is not done in situations, where the exit code is already checked (ifwhileuntil,||&&)
-fnoglobОтменяет развертывание путей и имен файлов (globbing)
-hhashallЗапоминает абсолютное расположение команды если она вызывалась, и использует в следующий раз этот путь (хеширование).   Включено по-умолчанию. (см checkhash из списка опций shopt)
-kkeywordРазрешает подставлять значение перемернной среды окружения везде в командной строке, а не только во время вызова команды.
-mmonitorMonitor mode. При управлении job-ами будет выведено короткое описание завершенного в фоне задания. По-умолчанию включено для для интерактивных оболочек с управлением job-ами.
-nnoexecЧитает и парсит команды из скрипта, но не исполняет их. Полезно для проверки сценария на предмет синтаксических ошибок. Игнорируется интерактивными оболочками.
-o
Устаналивает или снимает опцию по её длинному имени. Например set -o noglob. Если никакой опции не задано, то выводится список всех опций и их статус.
-pprivilegedВключает привилегированный режим.
-tonecmdВыходит после чтения и выполнения одной команды.
-unounsetРассматривает сброс (unset) переменной как ошибку при выполнении parameter expansion. Неинтерактивные оболочки завершают свое выполнение при такой ошибке.
-vverboseВыводит прочитанные или введенные строки при выполнении. Полезно при отладке.
-xxtraceРежим отладки. Перед выполнением команды печатает её со всеми уже развернутыми подстановками и вычислениями.
-BbraceexpandОболочка осуществляет раскрытие скобок. разворачивание (раскрытие) скобок. Эта опция включена по-умолчанию.
-CnoclobberНе перезаписывает файлы в операциях перенаправлениях потока. Вы можете обойти это ограничение используя оператор перенаправления  >| там где это необходимо. Смотрите перенаправления
-EerrtraceERR-ловушки будут наследоваться функциями оболочки, подстановками команд и командами которые выполняются в окружении подоболочки.
-HhistexpandРазрешены подстановки из истории команд (!-style). По умолчанию включено для интерактивных оболочек.
-PphysicalНе следовать по симлинкам когда изменяются директории, use the physical filesystem structure.
-TfunctraceDEBUG— и RETURN-ловушки будут унаследованы последующими средами. Аналогично как  -E для ERR -ловушек.
-
Означает «конец опций» — все следующие аргументы будут рассматриваться как позиционные параметры, даже если начинаются с минуса, как опции.
--
If no arguments follow, the positional parameters are unset. With arguments, the positional parameters are set, even if the strings begin with a - (dash) like an option.
Длинные опции, -o у которых нет короткого экивалента.

emacsВключает emacs-стиль для редактирования команд. По-умолчанию включена.

historyВедется история команд. Включена по-умолчанию для интерактивных оболочек.

ignoreeofТакой же эффект как и команды IGNOREEOF=10. Смотрите shell variables.

nolog(В настоящее время игнорируется. currently ignored)

pipefailIf set, the exit code from a pipeline is different to the normal («last command in pipeline») behaviour: TRUE when no command failed, FALSE when something failed (code of the rightmost command that failed)

posixКогда эта опция установлена —  Bash работает в режиме POSIX.

viВключает vi-стиль для редактирования команд. По-умолчанию включена.

Примеры

Часть скрипта, который показывает как включить-выключить вывод отладочной информации в скрипте  (-x):

#!/bin/bash
...
set -x # on
...
set +x # off
...

Соображения относительно портируемости

Команда set  ее основы поведения оболочки при измененных опциях определены POSIX®. Однако, есть опции, специфичные для Bash. Естественно они не переносимы.

PSM1000 Command Strings

Подключение к системе AMX или Crestron

Соединение: Ethernet (TCP/IP; выберите Client в программе AMX/Crestron)

Порт: 2202

Для связи с блоком AMX или Crestron по сети Ethernet можно использовать следующие сообщения.

Типы сообщений

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

SETОтправляется системой управления устройству Shure для изменения значения параметра. Используется для установки определенного значения для параметра. После того как будет отправлена команда SET, устройство Shure в ответ отправит строку REPORT с текущим результатом настройки.
GETПозволяет получить текущее значение параметра. После того как будет отправлена команда GET, устройство Shure в ответ отправит строку REPORT с текущим значением параметра.
REPORTПозволяет передать текущее значение параметра. Строка REPORT отправляется устройством Shure системе управления в ответ на команду SET или GET. Строка REPORT также отправляется в случае изменения параметра на устройстве Shure.

Синтаксис

Все отправляемые и принимаемые сообщения состоят из символов ASCII.

  • Каждое сообщение начинается с символа «<» с пробелом.
  • Каждое сообщение заканчивается символом «>».
  • Каждое сообщение завершается символом возврата каретки и перевода строки (CRLF). В системе управления, возможно, потребуется ввести шестнадцатеричное значение, эквивалентное 0x0D0A. Для получения дополнительной информации о вводе символа возврата каретки см. руководство по эксплуатации системы управления.
  • Если сообщение является параметром блока, в строке не нужно указывать номер канала.

Примеры сообщений

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

  • < GET 1 FREQUENCY >
  • < REPORT 1 FREQUENCY 578000 >

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

  • < SET DEVICE_NAME Shure >
  • < REPORT DEVICE_NAME Shure >

Таблица откликов на команды

КОМАНДАОТКЛИК
Просмотр имени передатчикаGET DEVICE_NAMEREPORT DEVICE_NAME vvvvvvvv
Установка имени каналаSET x CHAN NAME vvvvvvvvREPORT x CHAN_NAME vvvvvvvv
Получение имени каналаGET x CHAN NAMEREPORT CHAN_NAME vvvvvvvv
Установка уровня аудиосигналаSET x AUDIO_IN_LVL vvvvREPORT x AUDIO_IN_LVL vvvv
Просмотр уровня аудиосигналаGET x AUDIO_IN_LVLREPORT x AUDIO_IN_LVL vvvv
Установка группы и канала передатчикаSET x GROUP_CHAN gg,ccREPORT x FREQUENCY vvvvvvvvvvv 
REPORT x GROUP_CHAN gg,ccvvv
Просмотр группы и канала передатчикаGET x GROUP_CHANREPORT x GROUP_CHAN gg,cc
Установка частоты передатчикаSET x FREQUENCY vvvvvvvvvvvREPORT x FREQUENCY vvvvvvvvvvv 
REPORT x GROUP_CHAN —,—vvv
Просмотр частоты передатчикаGET x FREQUENCYREPORT x FREQUENCY vvvvvvvvvvv
Установка уровня передачи ВЧ-сигналаSET x RF_TX_LVL vvvvvvREPORT x RF_TX_LVL vvvvvv
Просмотр уровня передачи ВЧ-сигналаGET x RF_TX_LVLREPORT x RF_TX_LVL vvvvvv
Установка состояния вывода ВЧ-сигналаSET x RF_MUTE vvvv 
1 = выключение, 0 = включениеREPORT x RF_MUTE vvvv 
1 = выключение, 0 = включение
Просмотр состояния вывода ВЧ-сигналаGET x RF_MUTE 
1 = выключение, 0 = включениеREPORT x RF_MUTE vvvv 
1 = выключение, 0 = включение
Установка режима передачи звукаSET x AUDIO_TX_MODE vvvv 
1 = моно, 2 = двухточечный, 3 = стереоREPORT x AUDIO_TX_MODE vvvv 
1 = моно, 2 = двухточечный, 3 = стерео
Просмотр режима передачи звукаGET x AUDIO_TX_MODEREPORT x AUDIO_TX_MODE vvvv 
1 = моно, 2 = двухточечный, 3 = стерео
Установка уровня аудиосигнала линейного входаSET x AUDIO_IN_LINE_LVL vvvv 
0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход)REPORT x AUDIO_IN_LINE_LVL vvvv 
0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход)
Просмотр уровня аудиосигнала линейного входаGET x AUDIO_IN_LINE_LVLREPORT x AUDIO_IN_LINE_LVL vvvv 
0 = выкл. (дополнительных вход), 1 = вкл. (линейный вход)
Установка частоты измеренийSET x METER_RATE vvvvvvvvvvv 
0 = выкл., значение в миллисекундахREPORT x METER_RATE vvvvvvvvvvv 
0 = выкл., значение в миллисекундах
Просмотр частоты измеренийGET x METER_RATEREPORT x METER_RATE vvvvvvvvvvv 
0 = выкл., значение в миллисекундах
Уровень измерителя аудиосигналаREPORT x AUDIO_IN_LVL_L vvvvvvvvvvvREPORT x AUDIO_IN_LVL_L vvvvvvvvvvv 
REPORT x AUDIO_IN_LVL_R vvvvvvvvvvv

Batch script для начинающих / Хабр

Дисклеймер

Мне 12 и я сам в этой теме плохо шарю, т. к. инфы в инете мало. Пж, без хейта.

Что такое батники и с чем их едят

Пакетный файл или в простонародье батник — это файл, который запускает командную сроку или сокращенно cmd, которая построчно интерпретирует команды, записанные в нем. Подробнее смотрите на https://ru.wikipedia.org/wiki/Пакетный_файл.

Первая программа и основные команды

Чтобы сделать батник, нужно сначала создать текстовый файл с именем test и изменить расширение c .txt на .bat. О том, как можно это сделать, читайте здесь: https://remontka.pro/file-extensions. У вас должен появиться файл с такой иконкой:

test.bat

Нажимаем на него ПРАВОЙ кнопкой мыши. Должно появиться диалоговое окно. Нажмем «Открыть». Должен открыться блокнот, пишем:

@echo off
echo Hello world!
pause

В 1-ой сроке («@echo off») префикс ‘@ ‘ означает, что команда не будет выведена на экран(попробуйте его убрать 🙂 ), сама же команда (echo) выводит текст следующий за ней(см. строку 2), НО, если подать строку «off», все последующие команды будут действовать так, как будто перед ними стоит префикс ‘@’, «echo on», соответственно, выключает этот режим. Чтобы вывести символ «%», его нужно дублировать, потом поймете почему :-), для вывода пустой строки поставьте «.» после «echo»
В 3-ей строке команда выводит строку «press any key to continue . . .» (если у вас русский язык — «Для продолжения нажмите любую клавишу . . .») и останавливает программу до нажатия любой клавиши.

Наводим красоту

Команда «rem»

не эта 🙂

не делает ничего и служит комментарием к коду

rem Это самая лучшая прога в мире!!!!!

Код включает русские символы и другие из ascii(например: «╬▓☼», можно скопировать с http://pascalguru.ru/psevdograf.html), иначе ascii символы превратятся в кракозябры:

chcp 65001

Следующий код код работает, как команда «pause», но ничего не выводит на экран и не реагирует на нажатие клавиш(я потом объясню, как это работает).

:m
goto m

А этот — меняет заголовок окна на «name»

Заголовок окна
title name

Эта команда меняет цвет фона и текста, вместо a и b можно поставить любые шестнадцатеричные цифры(команда не сработает если a = b) см. таблицу ниже. Запись c одной буквой «а» аналогично записи «0a»

color ab
Таблица

Эта — досрочно завершает программу

exit

Переменные

Создать переменную можно с помощью команды set, синтаксис объявления следующий: P.S. это не совсем переменные, это скорее макросы (для тех к кто не знает C/C++ это именованный кусочек кода, имя которого заменяется на этот кусочек кода)

set a=Hello world

Если после «set» добавить флаг «/a» то:

  1. Переменной задастся значение выражения, а не его текст, например:

    set a=2+2
    > 2+2
    set /a a=2+2
    > 4
  2. Переменной можно присвоить ТОЛЬКО числовое значение

Чтобы обратиться к переменной, нужно окружить ее символами «%» (так %name%), пример кода:

set /a a=%b%+%b%
echo %a%

Подробнее о переменных

Если добавить флаг «/p», то выводиться значение после символа «=», а переменной задается введенное значение(запустите этот код:)

@echo off
set /p a=Enter str
echo %a%
pause

следующий код вырезает строку от символа номер «a» до символа номер «b» НЕ включительно(счет идет с нуля, отрицательные числа — счет с конца от единицы). Если аргумент один, то он присваивается числу «b», а «a» = 0

%str:~a,b%

следующий заменяет подстроки «a» в строке на строки «b»:

%str:a=b%

Циклы и условия

Цикл можно создать с помощью команды «for», синтаксис следующий:

for %%i in (a b c) do (
		cmd
)

или такой

for %%i in (a b c) do cmd

(a b c) это список (не обязательно из 3-х элементов) и переменная %%i (нужно ставить символ после процентов, а не между) по очереди проходит по значениям в списке

Если добавить флаг «/l», то переменная в первый раз будет равна «a». К ней каждый раз будет прибавляться «b», пока она не станет больше «c»(тут размер ДОЛЖЕН равняться 3)

запустите этот код, тут все наглядно

@echo off
chcp 65001
echo Начало
for /l %%i in (1 1 10) do echo %%i
echo Конец
pause

Команда if выполняет код, если условие верно (или если поставить not после if, когда НЕ верно), вот операторы сравнения:

P. S. строки нужно брать в кавычки «%str%»==»Hello»

equ(==)

=

neq

lss

<

leq

gtr

>

geq

пример кода:

@echo off
set /p a=Enter number
if a gtr 0 echo positive else\
if a equ 0 echo 0 else echo negative
pause

в 3-ей строке, если «a» > 0 выводиться «положительный»(на английском 🙂 ), если равен — 0,в 4-ой если меньше — «отрицательный»

символ «\» означает, что команда продолжается на следующей строке

Метки

Создадите файл start.bat в той же папке, где и test.bat, напишите в нем:

test.bat 2 2

Мы запустили батник, НО подали в него аргументы 2 и 2. Чтобы к ним обратиться, нужно написать %n, где «n» — номер аргумента, считая от одного(не от нуля), вот код, считающий сумму первого и второго аргумента (их может быть от нуля до 9-и):

@echo off
set /a res=%1+%2
echo res
pause

Метка — это именованное место в коде, она создается с помощью команды «:name»

А этот переходит на метку :m и продолжает выполнение, начиная с нее

rem куча кода
:m
rem куча кода
goto m
rem куча кода

И в завершение статьи, хочу сказать о команде call. Она превращает в последующей команде «%%» в «%», а переменные — на их значения. Пример использования:

call echo %%str:~%a%,%b%%%

Set — Переменная среды — Windows CMD

Set — Переменная среды — Windows CMD — SS64.com
  • SS64
  • CMD
  • Практическое руководство

Показать, установить или удалить переменные среды CMD. Изменения, сделанные с помощью SET, останутся только на время действия текущего CMD-сеанс.

 Синтаксис
      НАБОР  переменная 
      SET  переменная  =  строка 
      КОМПЛЕКТ " переменная  =  строка  "
      НАБОР " переменная ="

      SET /A  "переменная  =  выражение "
      SET /P  переменная  = [ promptString ]
      УСТАНОВЛЕН "

Ключ
     переменная  : новое или существующее имя переменной среды, например. _num
     string  : Текстовая строка для присвоения переменной.

     выражение  : Арифметическое выражение
   /A : см.  полную информацию об арифметических выражениях ниже. 

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

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

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

Любые лишние пробелы вокруг имени переменной или строки будут , а не следует игнорировать, SET не прощает лишних пробелов, как многие другие языки сценариев. Поэтому используйте SET alpha=beta, а не SET alpha = beta

.

Первый символ имени не должен быть цифрой. Обычной практикой является префикс имен переменных с символом undescore или знаком доллара _variable или $variable. Эти префиксы не требуются, но помогают предотвратить путаницу со стандартными встроенными переменными среды Windows или любыми другими командными строками.

Оболочка CMD не сможет прочитать переменную среды, если она содержит более 8 191 символа.

Показать переменную:

В большинстве случаев окружайте имя переменной символами %, и будет использоваться значение переменной
например Чтобы отобразить значение переменной _department с ЭХО-команда:
ЭХО %_department%

Если имя переменной не найдено в текущей среде, SET установит %ERRORLEVEL% в 1 .
Это можно обнаружить с помощью IF ERRORLEVEL …

Включение дополнительных символов может быть полезно для отображения любого пробела:
ЭХО [%_department%]
ЭХО «%_department%»

Введите SET без параметров, чтобы отобразить все текущие переменные среды.

Введите SET с именем переменной, чтобы отобразить эту переменную
SET _department

Команда SET, запущенная со строкой (без знака равенства), отобразит список всех соответствующих переменных с подстановочными знаками

Отображение переменных, начинающихся с «P»:
НАБОР стр.
Показать переменные, начинающиеся с символа подчеркивания
НАБОР _

Установить переменную:

Пример хранения текстовой строки:

C:\> SET _dept=Продажи и маркетинг
C:\> установить _
_dept=Продажи и маркетинг

Установить переменную, содержащую символ перенаправления, обратите внимание на положение кавычек, которые не сохраняются:

НАБОР «_dept=Продажи и маркетинг»

Одна переменная может основываться на другой, но это не динамическая
Например.

C:\> установить «хх=рыба»
C:\> установить «msg=%xx% чипсов»
C:\> установить сообщение
msg=рыбные чипсы

C:\> установить «xx=колбаса»
C:\> установить сообщение
msg=рыбные чипсы

C:\> установить «msg=%xx% чипов»
C:\> установить сообщение
msg=колбасные чипсы

Избегайте начинать имена переменных с числа, это позволит избежать неправильной интерпретации переменной как параметра
%123_myvar% < > %1 23_myvar

Для отображения недокументированных системных переменных:

 КОМПЛЕКТ " 

Значения с пробелами — использование двойных кавычек

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

SET _variable=один два три

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

НАБОР » _variable=один и два »

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

SET _variable= » one & two »

Имена переменных с пробелами

Переменная может содержать пробелы, а также само имя переменной может содержать пробелы, поэтому следующее присвоение:
НАБОР _var = Мой текст
создаст переменную с именем «_var» — обратите внимание на завершающий пробел

Запрос пользовательского ввода

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

 @эхо выключено
Set /P _dept=Пожалуйста, введите отдел || Установить _dept=NothingChosen 
Если "%_dept%"=="NothingChosen" перейти к sub_error
Если /i "%_dept%"=="finance" перейти к sub_finance
Если /i "%_dept%"=="hr" перейти к sub_hr перейти: eof :sub_finance echo Вы выбрали финансовый отдел перейти: eof :sub_hr echo Вы выбрали отдел кадров
goto:eof :sub_error эхо Ничего не выбрано

Строка подсказки может быть пустой. Имя переменной также можно оставить пустым, но это недокументировано.

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

Команда CHOICE является альтернативой SET /P (но CHOICE принимает только один символ/нажатие клавиши).

Эхо строки без завершающих CR/LF

Стандартная команда ECHO всегда добавляет CR/LF в конец каждой отображаемой строки, возвращая курсор в начало следующей строки.
SET /P этого не делает, поэтому его можно использовать для отображения строки. Вставьте символ NUL в SET /P, чтобы он не ждал ввода пользователя:

Set /P _scratch=»Это сообщение для пользователя»

Поместить первую строку файла в переменную:

Установить /P _MyVar= Эхо %_MyVar%

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

В самых ранних версиях CMD любой возврат каретки/новые строки (CR+LF) перед первой строкой, содержащей текст, игнорировался.

Удалить переменную

Введите SET только с именем переменной и знаком равенства:

SET _department=

Еще лучше, чтобы убедиться, что после знака = нет пробела в конце, поместите выражение в круглые скобки или кавычки:
(УСТАНОВИТЬ _отдел =)
или
УСТАНОВИТЬ «_department=»

Арифметические выражения (SET /a)

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

При ссылке на переменную в вашем выражении SET /A позволяет вам опустить %, поэтому _myvar вместо %_myvar%

Любое вычисление SET /A, возвращающее дробный результат, будет округлено в меньшую сторону до ближайшего целого числа.

Оцениваемое выражение может включать следующие операторы:
Для использования оператора Modulus (%) в командной строке или в пакетном сценарии его необходимо удвоить до (%%), как показано ниже. 3″ Сдвиг. (знаковый бит ⇨ 0) Арифметический сдвиг. >> Правый Shift. (Заполняет бит знака таким образом, чтобы отрицательное число всегда оставалось отрицательным.) Ни ShiftRight, ни ShiftLeft не обнаружат переполнения. <<= Набор переменных левого сдвига /a "_num<<=2" >>= Набор переменных правого сдвига /a «_num>>=2» ( ) Набор выражений группы скобок /a «_num=(2+3)*5» , Набор выражений, разделенных запятыми /a «_num=2,_result=_num*5»

Если имя переменной указано как часть выражения, но не определено в текущей среде, тогда SET /a будет использовать значение 0.

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

См. примеры SET /a ниже и эту ветку форума для получения дополнительной информации.
также см. SetX, VarSearch и VarSubstring для получения дополнительной информации об управлении переменными.

SET /A должен работать во всем диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647), но на практике для отрицательных целых чисел он не будет опускаться ниже -2 147 483 647, потому что правильный результат дополнения до двух 2 147 483 648 вызовет положительное переполнение.

Примеры:

НАБОР/А «_result=2+4»
(=6)

НАБОР/A «_result=5»
(=5)
НАБОР /A «_результат += 5″
(=10)

НАБОР /A «_result=2 << 3″
(=16) { 2 Lsh 3 = двоичный 10 Lsh 3 = двоичный 10000 = десятичный 16 }

SET /A «_result=5 %% 2″
(=1) { 5/2 = 2 + 2 остаток 1 = 1 }

SET /A «_var1=_var2=_var3=10»
(устанавливает 3 переменные в одно и то же значение — недокументированный синтаксис.)

SET /A будет обрабатывать любую строку символов в выражении как имя переменной среды. Это позволяет вам выполнять арифметические действия с окружающей средой переменные без необходимости вводить какие-либо знаки %, чтобы получить значения. НАБОР/A «_result=5 + _MyVar»

В одной строке можно выполнить несколько расчетов, разделяя каждый расчет запятыми, например:

Установите «_year=1999»
Установить /a «_centre=_year/100, _next=_centre+1»

Все числа должны находиться в диапазоне 32-битных целых чисел со знаком (от -2 147 483 648 до 2 147 483 647). Для обработки больших чисел используйте PowerShell или VBScript.

Ведущий ноль будет указывать Octal

Числовые значения являются десятичными числами, если перед ними не стоит цифра 9.0069 0x для шестнадцатеричных чисел,
0 для восьмеричных чисел.

Таким образом, 0x10 = 020 = 16 десятичных чисел

Восьмеричная запись может сбивать с толку — все числовые значения, начинающиеся с нуля, рассматриваются как восьмеричные, но 08 и 09 не являются допустимыми восьмеричными цифрами.
Например, SET /a «_month=07» вернет значение 7, а SET /a «_month=09» вернет ошибку.

Постоянные изменения

Изменения, сделанные с помощью команды SET, НЕ являются постоянными, они применяются только к текущему приглашению CMD и остаются только до закрытия окна CMD.
Чтобы навсегда изменить переменную в командной строке, используйте SetX
. или с графическим интерфейсом — Панель управления | Система | Окружающая среда | Системные/пользовательские переменные

Постоянное изменение переменной с помощью SetX не повлияет на уже открытое приглашение CMD.
Только новые подсказки CMD получат новую настройку.

Конечно, вы можете использовать SetX в сочетании с SET для одновременного изменения обоих:

Установить _Library=T:\Library\
SetX _Library T:\Library\ /m

Изменить среду для других сеансов

Ни SET, ни SetX не повлияют на другие сеансы CMD, которые уже запущены на машине. Это хорошо, особенно на многопользовательских компьютерах, вашим сценариям не придется бороться с динамически меняющейся средой во время их работы.

Можно добавить постоянные переменные среды в реестр (HKCU\Environment), но это недокументированный (и, вероятно, неподдерживаемый) метод, который не вступит в силу до следующего входа пользователя в систему.

Переменные системной среды можно найти в реестре здесь:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

ВЫЗОВ

Синтаксис CALL SET позволяет оценить переменную подстроку, на странице CALL есть более подробная информация об этом методе, в большинстве случаев лучшим подходом является использование Setlocal EnableDelayedExpansion

Autoexec.bat

Любой оператор SET в c:\autoexec.bat будет анализироваться во время загрузки
Переменные, установленные таким образом, недоступны для 32-битных графических программ — они не будут отображаться в панели управления.
Они появятся в командной строке CMD.

Если autoexec.bat ВЫЗЫВАЕТ какие-либо вторичные пакетные файлы, дополнительные пакетные файлы НЕ будут анализироваться при загрузке.
Такое поведение может быть полезно на ПК с двойной загрузкой.

Уровни ошибок

Когда расширения команд CMD включены (по умолчанию):

Уровень ошибки
Если переменная была успешно изменена без изменений , обычно это будет 0, но если предыдущая команда установила уровень ошибки, он будет сохранен (это ошибка).
SET Переменная не найдена или неверное имя.
SET _var=значение, когда имя _var начинается с «/» и не заключено в кавычки.
SET /P Пустой ответ от пользователя.
1
SET /A Несбалансированные скобки 903:50 1073750988
SET /A Отсутствует операнд 1073750989
SET /A Синтаксическая ошибка 1073750990
КОМПЛЕКТ /A Неверный номер 1073750991
SET /A Число больше 32 бит 1073750992
SET /A Деление на ноль 1073750993

SET — это внутренняя команда.
Если расширения команд отключены, все команды SET отключены, кроме простых назначений, таких как: _variable=MyText

# Я зациклился на тебе
# Я зациклился на тебе… — Руди Кларк (Джеймс Рэй/Джордж Харрисон)

Связанные команды:

Синтаксис — VarSubstring Извлечь часть переменной (подстроку).
Синтаксис — VarSearch Поиск и замена части переменной.
Синтаксис — Переменные среды — Список переменных по умолчанию.
CALL — Оценить переменные окружения.
ENDLOCAL — Завершить локализацию изменений среды, используйте для возврата значений.
ВЫХОД — Установить конкретный уровень ошибки.
ПУТЬ — Отображение или установка пути поиска исполняемых файлов.
REG — Чтение или установка значений реестра.
SETLOCAL — Начать локализацию изменений переменных среды.
SETX — установить переменную среды на постоянной основе.
WMIC ENVIRONMENT — установка переменных среды через WMI.
Параметры — получить полный или частичный путь из переменной командной строки.
StackOverflow — Сохранение новой строки в переменной.
Эквивалент PowerShell: Set-Variable — установка переменной и значения (set/sv).
Эквивалент PowerShell: Read-Host — запрос ввода данных пользователем.
Эквивалентная команда bash (Linux): env — отображение, установка или удаление переменных среды.


 

Copyright © 1999-2022 SS64.com
Некоторые права защищены

Команда набора командной строки MS-DOS и Windows

Обновлено: 13.03.2021 автором Computer Hope

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

  • Наличие
  • Установить синтаксис
  • Набор примеров
  • Секретные команды

Наличие

Set — это внутренняя команда, доступная в следующих операционных системах Microsoft.

  • Все версии MS-DOS
  • Windows 95
  • Windows 98
  • Windows ME
  • Windows NT
  • Windows 2000
  • Windows XP
  • Windows 7
  • Windows 8
  • Windows 10
  • Windows 11

Установить синтаксис

  • Синтаксис Windows 2000, XP и более поздних версий.
  • Синтаксис консоли восстановления Windows 2000 и Windows XP.
  • MS-DOS, Windows 95, Windows 98, синтаксис Windows ME.

Windows 2000, XP и более поздние версии синтаксиса

Отображает, задает или удаляет переменные среды cmd.exe.

 НАБОР [переменная=[строка]] 
переменная Задает имя переменной среды.
строка Задает несколько символов для присвоения переменной.

Введите SET без параметров для отображения текущих переменных среды.

Если расширения команд включены, SET изменяется следующим образом:

Команда SET, вызванная с именем переменной, без знака равенства или значения отображает значение всех переменных, префикс которых соответствует имени, указанному в команде SET. Например:

КОМПЛЕКТ Р

отобразит все переменные, начинающиеся с буквы «P».

Команда

SET устанавливает для параметра ERRORLEVEL значение 1, если имя переменной не найдено в текущей среде.

Команда SET не позволяет использовать знак равенства в имени переменной.

В команду SET добавлены два новых переключателя:

SET /A выражение
SET /P переменная = [строка подсказки]

Переключатель /A указывает, что строка справа от знака равенства является вычисляемым числовым выражением. Оценщик выражений довольно прост и поддерживает следующие операции в порядке убывания приоритета: 9= |= <<= >>= Задание. , Разделитель выражений.

Если вы используете какой-либо логический оператор или оператор модуля, вам необходимо заключить строку выражения в кавычки. Любые нечисловые строки в выражении обрабатываются как имена переменных среды, значения которых преобразуются в числа перед их использованием. Если имя переменной среды указано, но не определено в текущей среде, используется нулевое значение. Это позволяет вам выполнять арифметические действия со значениями переменных среды без необходимости вводить все эти знаки %, чтобы получить их значения. Если SET /A выполняется из командной строки вне командного сценария, то отображается окончательное значение выражения. Для оператора присваивания требуется имя переменной среды слева от оператора присваивания. Числовые значения являются десятичными числами, если перед ними не стоит префикс 0x для шестнадцатеричных чисел и 0 для восьмеричных чисел. Таким образом, 0x12 совпадает с 18 и 022. Примечание: восьмеричная запись может сбивать с толку: 08 и 09.являются недопустимыми числами, поскольку 8 и 9 не являются допустимыми восьмеричными цифрами.

Переключатель /P позволяет установить значение переменной в строке ввода, введенной пользователем. Отображает указанную строку promptString перед чтением строки ввода. PromptString может быть пустым.

Подстановка переменных среды улучшена следующим образом:

 %ПУТЬ:стр1=строка2% 

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

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

 %ПУТЬ:~10,5% 

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

 %ПУТЬ:~-10% 

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

 %ПУТЬ:~0,-2% 

извлечет все, кроме двух последних символов переменной PATH.

Наконец, добавлена ​​поддержка отложенного раскрытия переменных среды. Эта поддержка всегда отключена по умолчанию, но ее можно включить/выключить с помощью переключателя командной строки /V в CMD. EXE. См. CMD/?

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

 установить VAR=до
если "%VAR%" == "до" (
установить VAR=после;
if "%VAR%" == "after" @echo Если вы видите это, это сработало
) 

никогда не отобразит сообщение, потому что %VAR% расширяется, когда ложь считывается в память. Изменения, которые происходят с переменной после этого (например, VAR=after в нашем составном операторе if), не раскрываются.

Аналогично, следующий пример не будет работать должным образом:

 установить СПИСОК=
для %i в (*) установить LIST=%LIST% %i
эхо% СПИСОК% 

в том, что он НЕ будет создавать список файлов в текущем каталоге, а вместо этого устанавливает переменную LIST в последний найденный файл. Опять же, это связано с тем, что %LIST% расширяется после чтения инструкции FOR, а переменная LIST пуста. Таким образом, фактический цикл FOR, который мы выполняем, имеет вид:

.
 для %i в (*) установить LIST= %i 

, который продолжает устанавливать LIST для последнего найденного файла.

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

 установить VAR=до
если "%VAR%" == "до" (
установить VAR=после
если "!ВАР!" == "после" @echo Если вы видите это, это сработало
)
установить СПИСОК =
для %i в (*) установите LIST=!LIST! %я
эхо %СПИСОК% 

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

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

%CD% — расширяется до текущей строки каталога.

%DATE% — расширяется до текущей даты, используя тот же формат, что и команда DATE.

%TIME% — расширяется до текущего времени, используя тот же формат, что и команда TIME.

%RANDOM% — заменяется случайным десятичным числом от 0 до 32767.

%ERRORLEVEL% — расширяется до текущего значения ERRORLEVEL

%CMDEXTVERSION% — заменяется на текущий номер версии расширений командного процессора.

%CMDCMDLINE% — заменяется исходной командной строкой, вызвавшей командный процессор.

%HIGHESTNUMANODENUMBER% — расширяется до максимального номера узла NUMA на этой машине.

Синтаксис консоли восстановления Windows 2000 и Windows XP

 установить [переменная_среды]=[Истина/Ложь] 
[переменная_среды] allowwildcards
allowallpaths
allowremovablemedia
nocopyprompt
[Истина/Ложь] Установка для переменной enviroment_variable значения true включает переменную enviroment_variable. По умолчанию они установлены на Ложь .

MS-DOS, Windows 95, Windows 98, синтаксис Windows ME

Отображает, задает или удаляет переменные среды Windows.

 НАБОР [переменная=[строка]] 
переменная Задает имя переменной среды.
строка Задает несколько символов для присвоения переменной.

Введите SET без параметров для отображения текущих переменных среды.

Набор примеров

 установить путь = c:\windows\команда 

Укажите путь к c:\windows\command.

Примечание

Пользователи Microsoft Windows 2000 и Windows XP могут столкнуться с трудностями при определении заданных значений с помощью командной строки MS-DOS. См.: Как установить переменные пути и среды в Windows.

 набор 

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

Как использовать команду set вместо команды selection в Windows 2000 и Windows XP

В приведенном ниже примере пользователю будет предложено ввести вариант 1,2 или 3, чтобы напечатать hello , bye или test .

 @ECHO off 
cls
:start
ECHO.
ECHO 1. Напечатать Hello
ECHO 2. Напечатать Bye
ECHO 3. Напечатать Test
set selection=
set /p selection=Введите число для печати текста.
, если не '%choice%'=='', установить selection=%choice:~0,1%
, если '%choice%'=='1', перейти к hello пока
, если '%choice%'=='3' перейти к тесту
ECHO "%choice%" недействителен, попробуйте еще раз
ECHO.
перейти к началу
:hello
ECHO HELLO
перейти к концу
:пока
ECHO BYE
перейти к концу
:тест
ECHO TEST
перейти к концу
:концу

Секретные команды

Если вы хотите скрыть все свои каталоги от пользователей, вы можете использовать:

 УСТАНОВИТЬ DIRCMD=0 

Приведенная выше команда не позволяет никому видеть каталоги; однако к ним все еще можно получить доступ. Чтобы снова сделать каталоги видимыми, введите команду ниже.

 УСТАНОВИТЬ DIRCMD= 
  • Как использовать выбор и установку в пакетном файле.
  • См. наше определение набора для получения дополнительной информации и связанных ссылок по этому термину.

Команда Linux set и ее использование {9 примеров}

Введение

Команда set — это встроенная команда оболочки Linux, которая отображает и устанавливает имена и значения переменных оболочки и среды Linux. В Unix-подобных операционных системах набор равен 9.Команда 0787 работает в оболочке Bourne ( sh ), оболочке C ( csh ) и оболочке Korn ( ksh ).

В этом руководстве вы узнаете, что такое команда set и как ее использовать.

Предпосылки

  • Система под управлением Linux.
  • Доступ к терминалу/командной строке.

Linux set Синтаксис команды

Общий синтаксис для SET Команда:

 SET [OPTIONS] [Аргументы] 

Опции

В контексте SET , [Подборные или отключить в среде оболочки Bash. Используйте его, чтобы влиять на поведение определенных сценариев оболочки и помогать выполнять нужные задачи.

  • Установите параметр, используя знак минус ( - ), за которым следует соответствующий параметр.
  • Отмените выбор параметра с помощью знака плюс ( + ), за которым следует соответствующий параметр.

Arguments

[arguments] are positional parameters and they are assigned in order with the following parameters:

  • $1
  • $2
  • . ..
  • $n

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

Выходные значения

Команда set имеет три выходных значения:

  • 0 . Отмечает успешное завершение.
  • 1 . Сбой, вызванный недопустимым аргументом.
  • 2 . Сбой, приводящий к сообщению об использовании, обычно из-за отсутствия аргумента.

Параметры команды Linux set

Команда set предоставляет обширный список параметров, которые можно комбинировать.

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

Options -o flags Description
-a -o allexport Marks all created or modified variables or functions for export.
-b -o notify Предупреждает пользователя о завершении фонового задания.
-e -o errexit Указывает оболочке выйти, если команда завершилась неудачно, т. е. если она выводит ненулевой статус.
-f -o ноглоб Отключает генерацию имени файла (подстановку).
-h -o hashall Находит и сохраняет команды функций, когда функция определена. Параметр -h включен по умолчанию.
-k -o ключевое слово Помещает в среду все аргументы присваивания для команды, а не только те, которые предшествуют имени команды.
-n -o noexec Читает команды, но не выполняет их.
-m -o монитор Отображает сообщение после завершения задачи.
-p -o привилегированный Отключает $ENV функции импорта и обработки файла7. 9Опция 0785 -p включена по умолчанию, если реальный и эффективный идентификаторы пользователей не совпадают. Отключение устанавливает эффективные uid и gid на реальные uid и gid.
-t -o onecmd Читает одну команду и затем выходит.
-u -o nounset Обрабатывает неустановленные или неопределенные переменные как ошибку при подстановке (во время расширения параметра). Не применяется к специальным параметрам, таким как подстановочный знак 9.0785 * или @ .
-v -o подробный Выводит строки ввода оболочки при их чтении.
-x -o xtrace Выводит аргументы команды во время выполнения.
-B -o braceexpand Выполняет расширение раскоса оболочки.
-C -o noclobber Предотвращает перезапись существующих обычных файлов путем перенаправления вывода. По умолчанию Bash разрешает перенаправленный вывод для перезаписи существующих файлов.
-E -o errtrace Заставляет функции оболочки наследовать прерывание ERR.
-H -o histexpand Включает замену истории стилей. Параметр включен по умолчанию, когда оболочка интерактивна.
-P -o физический Предотвращает переход по символической ссылке при выполнении команд.
-T -o функция Заставляет функции оболочки наследовать ловушку DEBUG.
-- н/д Присваивает оставшиеся аргументы позиционным параметрам. Если нет оставшихся аргументов, сбрасывает позиционные параметры.
- н/д Присваивает все оставшиеся аргументы позиционным параметрам. Отключает -x и -v вариантов.
н/д -o emacs Использует интерфейс редактирования строк в стиле emacs.
н/д -o история Включает историю команд.
н/д -o ignoreeof Оболочка не завершает работу при чтении конца файла.
н/д -o интерактивные-комментарии Разрешает комментарии в интерактивных командах.
н/д -o nolog Не записывает определения функций в файл истории.
н/д -o pipefail Возвращаемое значение конвейера — это состояние последней команды, которая имела ненулевой статус при выходе. Если при выходе ни одна из команд не имела ненулевой статус, значение равно нулю.
н/д -o posix Заставляет Bash соответствовать стандарту, когда операция по умолчанию отличается от стандарта Posix.
н/д -o vi Использует интерфейс редактирования строки, аналогичный vi .

Примеры команд Linux set

В этом разделе перечислены примеры наиболее часто используемых команд set .

Использование команды set без параметров

Запуск команды без параметров или аргументов выводит список всех параметров — имена и значения всех переменных оболочки и функций. Так как список очень длинный, его можно прокручивать с помощью клавиш Page Up и Page Down .

Ниже приведен пример частичного вывода команды set :

Отладка сценария

Команда set особенно удобна при отладке сценариев. Используйте -x с параметром установите команду , чтобы увидеть, какая команда в вашем сценарии выполняется после результата, что позволяет определить результат каждой команды.

В следующем примере показано, как отлаживать сценарии с помощью set -x . Выполните следующие действия:

1. Запустите set -x :

 set -x 

2. Используйте ваш любимый текстовый редактор (мы используем редактор vi) для создания сценария. Мы создали простой цикл, который позволяет нам видеть -x эффекты опции:

 x=10
в то время как [ $x -gt 0 ]; делать
         х=$[$х-1]
         эхо $х
         спать 2
done 

3. Убедитесь, что скрипт выполнен с помощью chmod, чтобы сделать его исполняемым. Этот шаг всегда обязателен перед запуском скрипта . Синтаксис:

 chmod +x [имя-сценария.sh] 

4. Выполните сценарий. Синтаксис:

 ./[script-name.sh] 

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

Другой способ включить отладку — поместить флаг -x в строку shebang скрипта:

 #!/bin/bash -x 

Экспорт скрипта

вариант -a . Экспорт переменных или функций позволяет использовать их другим подоболочкам и сценариям.

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

 set -a 

В следующем примере показано, как работает экспорт сценариев. Выполните следующие шаги:

1. Создайте новый скрипт, используя любой редактор. Например:

 один=1
два=2
три=3
четыре=4
/bin/bash 

Аргумент /bin/bash отмечает начало новой оболочки.

2. Проверить, работает ли скрипт в новой оболочке:

 echo $one $two $three $four
 

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

Выход при сбое команды

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

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

 #!/bin/bash
установить -е
кот несуществующий файл
эхо "Конец"
 

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

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

Предотвращение потери данных

По умолчанию Bash перезаписывает существующие файлы. Однако при использовании параметра -C Bash не перезаписывает существующий файл при перенаправлении вывода с использованием > , >& или <> перенаправляется на этот файл.

Например:

Сначала Bash позволяет перезаписать файл listing.txt . Однако после запуска команды set -C Bash выводит сообщение о том, что он не может перезаписать существующий файл.

Отчет о несуществующих переменных

По умолчанию в Bash игнорируются несуществующие переменные и работают с существующими. Использование параметра -u не позволяет Bash игнорировать несуществующие переменные и сообщает о проблеме.

Например, следующий сценарий не содержит команды set -u , а Bash игнорирует то, что $var2 не определено.

 #!/бин/баш
переменная1="123"
эхо $var1 $var2
 

Вывод содержит только $var1 .

Однако изменение сценария и добавление команды set -u не позволяет Bash игнорировать проблему и сообщает о ней:

 #!/bin/bash
установить -у
переменная1="123"
эхо $var1 $var2
 

Установка позиционных параметров

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

 $[N] 

Значение [N] — это цифра, обозначающая позицию параметра. Например, $1 — первый позиционный параметр, $2 — второй параметр и т. д.

Например:

 Установите первую вторую треть 

, выполняя команду выше наборов Первая , чтобы соответствовать $ 1 Параметр $ . третий до $3 . Проверьте это с помощью команды echo:

 echo $2 

Отмените позиционные параметры, запустив:

 set -- 

Split Strings

Используйте команду set для разделения строк на основе пробелов на отдельные переменные. Например, разделите строки в переменной с именем myvar , которая говорит «Это тест» .

 myvar="Это тест"
установить -- $myvar
эхо $1
эхо $2
эхо $3
эхо $4
 

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

Установить флаги allexport и уведомления

Флаг -o allexport позволяет автоматически экспортировать все впоследствии определенные переменные, а флаг -o notify указывает оболочке немедленно печатать сообщения о завершении задания.

Чтобы установить флаги, выполните:

 set -o allexport -o notify 

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

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

Заключение

Теперь вы знаете, что такое команда set и как ее можно использовать в Linux. Протестируйте различные параметры, чтобы лучше понять команду и максимизировать свой контроль над средой Linux, используемой различными пакетами.

Если вам интересна тема Bash, ознакомьтесь с нашим подробным руководством по функциям Bash: как их использовать.

Переменные среды для приложений Java

Что такое переменные среды?

Переменные среды — это глобальных системных переменных , доступных для всех процессов/пользователей, работающих под управлением операционной системы (ОС), такой как Windows, macOS и Linux. Переменные среды полезны для хранения общесистемных значений, например,

  • PATH : наиболее часто используемая переменная среды, в которой хранится список каталогов для поиска исполняемых программ.
  • ОС : операционная система.
  • COMPUTENAME , USERNAME : сохраняет имя компьютера и текущего пользователя.
  • SystemRoot : корневой каталог системы.
  • (Windows) HOMEDRIVE , ДОМАШНИЙ ПУТЬ : Домашний каталог текущего пользователя.

(Windows) Переменные среды

Переменные среды в Windows НЕ чувствительны к регистру (поскольку устаревшая DOS НЕ учитывает регистр). Обычно они пишутся в верхнем регистре, а слова соединяются символом подчеркивания ( _ ), например, JAVA_HOME .

Отображение переменных среды и их значений

Чтобы просмотреть ВСЕ переменные среды и их значения, запустите CMD и введите команду « set », как показано ниже,

// Показать все переменные (в парах ИМЯ=ЗНАЧЕНИЕ)
  набор 
ИМЯ КОМПЬЮТЕРА=xxxxxxx
ОС=хххххх
ПУТЬ=xxxxxxx
. ...... 

Попробуйте выполнить команду " set " в своей системе и изучите перечисленные переменные среды. Обратите особое внимание на переменную с именем ПУТЬ .

Чтобы отобразить конкретную переменную, используйте команду " set varname " или " echo % varname % ":

// Показать конкретную переменную
  установить ИМЯ КОМПЬЮТЕРА 
ИМЯ КОМПЬЮТЕРА=xxxxxx

// или используйте команду "echo" с именем переменной, заключенным в пару "%"
  эхо %COMPUTERNAME% 
COMPUTERNAME=xxxxxx 
Установить/снять/изменить переменную среды для «текущего» сеанса CMD

Чтобы установить (или изменить) переменную среды, используйте команду « set varname = value ». Перед и после знака '=' не должно быть пробелов. Чтобы сбросить переменную среды, используйте « set varname = », т. е. установите для нее пустую строку.

  набор   имя_переменной 
  набор   имя_переменной   =   значение 
  набор   имя_переменной   = 
  набор  
 Показать значение переменной
Установите или измените значение переменной (Примечание: без пробела до и после '=')
Удалите переменную, установив пустую строку (Примечание: ничего после '=')
Показать ВСЕ переменные среды 

Например,

// Установить переменную среды с именем MY_VAR
  установить MY_VAR=привет 
   
// Отображать
  установить MY_VAR 
MY_VAR=привет
   
// Сбросить переменную окружения
   установить MY_VAR=
   
// Отображать
  установить MY_VAR 
Переменная среды MY_VAR не определена 

Переменная среды, установленная с помощью команды « set » в CMD, является локальной и доступна только для текущего сеанса CMD. Попробуйте установить переменную, перезапустите CMD и найдите переменную.

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

Для ссылки на переменную в Windows используйте % varname % (с префиксом и суффиксом '%' ). Например, вы можете использовать команду echo для вывода значения переменной в виде " echo % varname % ".

// Показать переменную окружения PATH
  эхо %PATH% 
ПУТЬ=xxxxxxx
   
// Добавляем каталог перед существующим PATH
  установить PATH=c:\myBin;%PATH% 
ПУТЬ=c:\myBin;[  существующих записей  ] 
Как добавить или изменить переменную среды «навсегда»

Чтобы добавить/изменить переменную среды на постоянной основе в Windows (чтобы она была доступна для ВСЕХ процессов/пользователей Windows и оставалась при загрузке ):

  1. Запустить «Панель управления»
  2. "Система"
  3. «Дополнительные параметры системы»
  4. Перейти на вкладку «Дополнительно»
  5. "Переменные среды"
  6. Выберите «Системные переменные» (для всех пользователей)
  7. К добавьте новую переменную среды:
    1. Выберите "Новый"
    2. Введите переменную «Имя» и «Значение». Вместо того, чтобы вводить «значение» и допускать ошибку опечатки, я предлагаю вам использовать кнопку «Обзор каталога ...» или «Обзор файла ...» для получения нужного каталога или файла.
  8. Чтобы изменить существующую переменную среды:
    1. Выберите "Редактировать"
    2. Введите новое "Значение". Вместо того, чтобы вводить «значение» и допускать ошибку опечатки, я предлагаю вам использовать кнопку «Обзор каталога ...» или «Обзор файла ...» для получения нужного каталога или файла.

Вам необходимо ПЕРЕЗАПУСТИТЬ CMD, чтобы новые настройки вступили в силу!

Чтобы проверить новую настройку, запустите CMD:

  установить VAR_NAME 
VAR_NAME=VAR_VALUE 
PATH Переменная среды в Windows

Когда вы запускаете исполняемую программу (с расширением файла « .exe », « .bat » или « .com ») из оболочки CMD, Windows ищет исполняемую программу в текущий рабочий каталог , за которым следуют все каталоги, перечисленные в переменной среды PATH . Если программа не может быть найдена в этих каталогах, вы получите следующую ошибку:

// (Windows 2000/XP/Vista/7/8/10) "cmd.exe"
  азбука 
'abc' не распознается как внутренняя или внешняя команда,
работающая программа или командный файл.
 
// (Windows 95/98) "command.com"
  азбука 
Неверная команда или имя файла 

Чтобы просмотреть текущий ПУТЬ , введите команду:

  ПУТЬ 
PATH=path2;path2;path4;... 
Как добавить каталог в PATH в Windows

Чтобы добавить каталог в существующий PATH в Windows:

  1. Запустите «Панель управления»
  2. "Система"
  3. «Дополнительные параметры системы»
  4. Перейти на вкладку «Дополнительно»
  5. "Переменные среды"
  6. В разделе «Системные переменные» (для всех пользователей) выберите «Путь»
  7. "Редактировать"
  8. (Для более новых версий Windows 10) Появится таблица, показывающая каталоги, включенные в текущую настройку PATH ⇒ «Создать» ⇒ «Обзор . ..», чтобы выбрать нужный каталог для добавления в PATH (не вводите как хотите сделайте опечатку!) ⇒ Несколько раз нажмите «Переместить вверх», чтобы переместить его наверх ⇒ «ОК» (не «Отмена») ⇒ «ОК» ⇒ «ОК».
  9. (Для старых версий Windows) Если вы не видите всплывающую таблицу, пришло время сменить компьютер.

Вам нужно ПЕРЕЗАПУСТИТЬ CMD, чтобы новая настройка PATH вступила в силу!

Чтобы проверить новую настройку, запустите CMD:

  ПУТЬ 
PATH=путь2;путь3;путь4;... 

Примечания:

  • Windows выполняет поиск в текущем каталоге ( . ) перед поиском записей PATH . (Unixes/macOS не выполняет поиск в текущем каталоге, если вы явно не укажете его в PATH.)
  • Windows использует точку с запятой ( ; ) в качестве разделителя пути; в то время как Unix/macOS использует двоеточие ( : ).
  • Если имя вашего каталога содержит специальные символы, такие как пробел (настоятельно не рекомендуется), заключите его в двойные кавычки.

(macOS/Linux) Переменные среды

Переменные среды в macOS/Unix чувствительны к регистру. Глобальные переменные окружения (доступные для ВСЕХ процессов) имеют имена в верхнем регистре, а слова соединяются символом подчеркивания ( _ ), например, JAVA_HOME . Локальные переменные (доступные только текущему процессу) написаны строчными буквами.

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

Большинство Unix-систем (Ubuntu/macOS) используют так называемую оболочку Bash . В оболочке bash :

  • Чтобы получить список всех переменных среды, используйте команду « env » (или « printenv »). Вы также можете использовать " set ", чтобы перечислить все переменные, включая все локальные переменные.
  • Чтобы сослаться на переменную, используйте $ varname с префиксом '$' (Windows использует % имя_переменной % ).
  • Чтобы напечатать значение определенной переменной, используйте команду " echo $ varname ".
  • Чтобы установить переменную среды, используйте команду « export varname=value », которая устанавливает переменную и экспортирует ее в глобальную среду (доступную другим процессам). Заключите значение в двойные кавычки, если оно содержит пробелы.
  • Чтобы установить локальную переменную, используйте команду " имя_переменной = значение " (или " установить имя_переменной = значение"). Локальная переменная доступна только внутри этого процесса.
  • Чтобы сбросить локальную переменную, используйте команду " varname = ", т.е. установите пустую строку (или " unset varname ").
Как установить переменную среды на постоянной основе в Bash Shell

Вы можете установить переменную среды на постоянной основе, поместив команду export в сценарий запуска оболочки Bash « ~/. bashrc » (или «~/.bash_profile » или « ~/.profile » ) вашего домашнего каталога; или " /etc/profile " для общесистемных операций. Обратите внимание, что файлы, начинающиеся с точки ( . ), по умолчанию скрыты. Чтобы отобразить скрытые файлы, используйте команду « ls -a » или « ls -al ».

Например, чтобы добавить каталог в PATH , добавьте следующую строку в конце "~/.bashrc " (или "~/.bash_profile ", или " ~/.profile "), где ~ обозначает домашний каталог текущего пользователя или " /etc/profile " для ВСЕХ пользователей.

// Добавляем каталог перед существующим PATH
export PATH=/usr/local/mysql/bin:$PATH 

(для Java) Вы можете установить переменные среды CLASSPATH , добавив следующую строку. Например,

export CLASSPATH=.:/usr/local/tomcat/lib/servlet-api.jar 

Обратите внимание, что оболочка Bash использует двоеточие ( : ) в качестве разделителя пути; в то время как окна используют точку с запятой ( ; ).

Чтобы обновить оболочку bash, введите команду " source " (или перезапустите оболочку bash):

// Обновить оболочку bash
  источник ~/.bashrc 
// или же
  источник ~/.bash_profile 
  источник ~/.profile 
  источник /etc/профиль  

(Примечания) Для старых версий csh (C-shell) и ksh (Korn-shell)

  • Используйте " printenv " (или " env "), чтобы получить список всех переменных среды.
  • Используйте « setenv varname value » и « unsetenv varname » для установки и отмены установки переменной среды.
  • Используйте « set varname = value » и « unset varname », чтобы установить и отменить установку локальной переменной для текущего процесса.
Переменная среды PATH

Большинство Unix и macOS используют так называемую оболочку Bash Shell в « Terminal ». Когда вы запускаете исполняемую программу (с разрешением файла исполняемый файл ) в оболочке Bash, система ищет программу во ВСЕХ каталогах, перечисленных в PATH . Если программа не может быть найдена, вы получите следующую ошибку:

  азбука 
bash: abc: команда не найдена 

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

  ./myProgram  

Чтобы просмотреть текущий PATH , введите команду:

  эхо $PATH 
path2:path3:path4:... 
Как добавить каталог в PATH в macOS/Linux

Чтобы добавить каталог к ​​существующему PATH в macOS/Unixes, добавьте следующую строку в конец одного из сценариев запуска, например "~/.bashrc ", " ~/.login " "~/. bash_profile ", " ~/.profile " (где ~ обозначает домашний каталог текущего пользователя) или " /etc/profile " для ВСЕХ пользователей.

// Добавляем каталог перед существующим PATH
  экспорт PATH=/path/to/dir:$PATH  

Чтобы обновить оболочку bash, введите команду « source » (или перезапустите оболочку bash):

// Обновить оболочку bash
  источник ~/.bashrc 
// или же
  источник ~/.bash_profile 
  источник ~/.profile 
  источник /etc/profile  

Чтобы проверить новую настройку, запустите CMD:

  эхо $PATH 
path2:path3:path4:... 

Примечания:

Java-приложения и переменные среды PATH, CLASSPATH, JAVA_HOME

Многие проблемы при установке и запуске Java-приложений вызваны некорректной настройкой переменных окружения ( глобальных системных переменных доступных всем процессам/пользователям, работающим под операционной системой), в частности, PATH , ПУТЬ К КЛАССУ и JAVA_HOME .

PATH

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

ПУТЬ (для Windows)

При запуске исполняемой программы (с расширением файла « .exe », « .bat » или « .com ») из оболочки CMD Windows ищет исполняемая программа в текущем рабочем каталоге , за которым следуют все каталоги, перечисленные в переменной среды PATH . Если программа не может быть найдена в этих каталогах, вы получите следующую ошибку:

// (Windows 2000/XP/Vista/7/8/10) "cmd.exe"
  азбука 
'abc' не распознается как внутренняя или внешняя команда,
работающая программа или командный файл.
 
// (Windows 95/98) "command.com"
  азбука 
Неверная команда или имя файла 

Например, если вы пытаетесь использовать компилятор Java " javac. exe " для компиляции исходного файла Java, но " javac.exe " не может быть найден в текущем каталоге и все каталоги в PATH , вы получите следующую ошибку:

  javac Hello.java 
'javac' не распознается как внутренняя или внешняя команда,
работающая программа или командный файл. 

ПУТЬ поддерживает список каталогов. В Windows каталоги разделяются точкой с запятой (; ).

Для приложений Java PATH должен включать следующие каталоги:

  • Каталог JDK " bin " (двоичный) (например, " c:\Program Files\java\jdk1.x.x\bin "), который содержит программы JDK, такие как компилятор Java " javac.exe " и среда выполнения Java " java.exe ".
  • " c:\windows\system32 " и " c:\windows ", которые содержат консольные программы и команды.

Каталог JDK " bin " должен быть указан перед " c:\windows\system32 " и " c:\windows " в PATH . Это связано с тем, что некоторые старые системы Windows предоставляют в этих каталогах собственную среду выполнения Java (часто устаревшую) (попробуйте выполнить поиск по запросу « java.exe » на вашем компьютере, вы можете найти несколько записей).

Чтобы добавить каталог (скажем, JDK « bin ») в существующий PATH, проверьте «Как добавить каталог в PATH».

PATH (для macOS/Linux)

Большинство Unix и macOS используют так называемую Bash Shell в « Terminal ». оболочке Bash, система ищет программу во ВСЕХ каталогах, перечисленных в ПУТЬ . Если программа не может быть найдена, вы получите следующую ошибку:

  азбука 
bash: abc: команда не найдена 

Например, если вы пытаетесь использовать компилятор Java " javac " для компиляции исходного файла Java, но " javac " не может быть найден в списке каталогов в PATH , вы получите следующую ошибку:

  javac Hello. java 
bash: javac: команда не найдена 

Для поддержки приложений Java необходимо включить каталог JDK " bin " (двоичный) в PATH. См. «Как добавить каталог в PATH».

CLASSPATH
Архивный файл Java (JAR)

Для простоты распространения классы Java часто архивируются (заархивируются) вместе в так называемый файл JAR. Чтобы использовать сторонний пакет Java, вам необходимо поместить распространяемый файл JAR в место, доступное для компилятора Java и среды выполнения Java.

Как найти классы?

Компилятор Java (" javac "), Java Runtime (" java ") и другие инструменты Java выполняют поиск классов, используемых в вашей программе, в следующем порядке:

  1. Классы платформы Java (начальная загрузка): включить системные классы в основные пакеты ( java.* ) и пакеты расширения ( javax.* ) в " rt.jar " (класс среды выполнения), " i18n.jar " (класс интернационализации), charsets. jar , jre/classes и другие.
  2. Каталоги расширений Java: вы можете скопировать внешние файлы JAR в каталог расширений Java (это удалено и не применимо к JDK 10).
    • Для Windows каталог расширений Java находится по адресу « \jre\lib\ext » (например, « c:\Program Files\Java\jdk1.7.0_{xx}\jre\lib\ доб ").
    • Для macOS каталоги расширений JDK: «/Library/Java/Extensions » и «/System/Library/Java/Extensions ».
    • Для Ubuntu каталоги расширений JDK: « /jre/lib/ext » (например, « /usr/user/java/jdk1.7.0_{xx}/jre/lib/ext »). и "/usr/java/packages/lib/ext ".
    Расположение каталогов расширений Java хранится в системном свойстве Java « java.ext.dirs ». Вы можете распечатать его содержимое через System.out.println(System.getProperty("java.ext.dirs")) .
  3. Путь поиска пользовательских классов (короче, путь к классу): определяется в следующем порядке:
    1. По умолчанию используется текущий рабочий каталог ( . ).
    2. Записи в переменной среды CLASSPATH , которая переопределяет значение по умолчанию.
    3. Записи в параметре командной строки -cp (или -classpath ), который переопределяет переменную среды CLASSPATH .
    4. Параметр командной строки среды выполнения -jar , который переопределяет все вышеперечисленное.
    Пути пользовательских классов хранятся в свойстве Java System " java.class.path ".
    Рекомендуется использовать параметр командной строки -cp (или -classpath ) (настраиваемый для каждого из ваших приложений) вместо установки постоянной среды ПУТЬ К КЛАССУ для всех приложений Java. IDE (например, Eclipse/NetBeans) управляет -cp ( -classpath ) для каждого из приложений и не полагается на среду CLASSPATH .
Не удается найти классы

Если среда выполнения Java (" java ") не может найти классы, используемые в вашей программе, во всех указанных выше местах, она выдает ошибку "Не удалось найти или загрузить основной класс xxxx" (JDK 1. 7) или "java.lang .NoClassDefFoundError" (до JDK 1.7).

Аналогичным образом, компилятор Java (" javac ") будет выдавать такие ошибки компиляции, как "не удается найти символ", "пакет не существует".

Примечания: внешние собственные библиотеки (" .lib ", " .dll ", " .a ", " .so ") должны быть найдены в пути в свойстве JRE " java.library.path ", который обычно, но не обязательно , включает все каталоги в переменной среды PATH . В противном случае , вы получите ошибку времени выполнения " java.lang.UnsatisfiedLinkError: no xxx in java.library.path ". и JAR-файлы (однофайловый архив class-файлов).Если CLASSPATH не задан, по умолчанию используется текущий каталог. Если вы установите CLASSPATH , важно включить текущий рабочий каталог ( . ). В противном случае текущий каталог не будет искаться.

Распространенная проблема при запуске программы hello-world: ПУТЬ К КЛАССУ задан, но не включает текущий рабочий каталог. Поэтому поиск в текущем каталоге не выполняется, что приводит к ошибке «Ошибка: не удалось найти или загрузить основной класс Hello». Вы можете просто удалить CLASSPATH и оставьте путь к классу по умолчанию для текущего каталога.

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

Переменная среды PATH (для поиска исполняемых программ) применима ко всем приложениям; пока CLASSPATH используется только Java.

Прочтите документы JDK "Установка CLASSPATH " и "Как находят классы" (гиперссылки можно найти на главной странице документации JDK или в Google).

CLASSPATH Переменная среды (для Windows)

CLASSPATH принимает каталоги и JAR-файлы. Записи пути разделяются точкой с запятой ( ; ).

Пример: отображение и изменение CLASSPATH для текущего сеанса CMD.

// Показать текущую настройку CLASSPATH
  установить ПУТЬ К КЛАССУ 
 
// Установить CLASSPATH в текущий каталог и файл JAR
  set CLASSPATH=.;d:\tomcat\lib\servlet-api.jar  

Вы можете установить CLASSPATH на постоянной основе. См. «Как установить переменную среды».

CLASSPATH (для macOS/Ubuntu)
  1. Чтобы установить CLASSPATH для текущего сеанса, выполните следующую команду:
    экспорт CLASSPATH=.:/usr/local/tomcat/bin/servlet-api.jar
     
    Используйте двоеточие « : » в качестве разделителя пути (вместо точки с запятой «; » в Windows).
  2. Чтобы установить CLASSPATH на постоянной основе, поместите приведенную выше команду экспорта в сценарий инициализации оболочки bash ( . bashrc или .bash_profile домашнего каталога или /etc/profile для всех пользователей). См. «Как установить переменную среды».
JAVA_HOME и JRE_HOME

Для многих приложений Java (таких как Tomcat) требуется переменная среды JAVA_HOME для установки каталога JDK.

Как установить JAVA_HOME в Windows

Сначала проверьте, не установлен ли уже JAVA_HOME , запустив CMD, и введите:

  set JAVA_HOME  

Если JAVA_HOME не установлено, вы получите сообщение «Переменная среды JAVA_HOME не определена». В противном случае будет показана текущая настройка.

Установить/изменить JAVA_HOME в Windows:

  1. Запустить «Панель управления»
  2. "Система"
  3. «Дополнительные параметры системы»
  4. Перейти на вкладку «Дополнительно»
  5. "Переменные среды"
  6. Выберите «Системные переменные» (для всех пользователей)
  7. К добавьте новую переменную среды " JAVA_HOME ":
    1. Выберите "Новый"
    2. В поле «Имя переменной» введите «JAVA_HOME».
    3. В «Значение переменной» нажмите «Обзор каталога...» и перейдите к установленному каталогу JDK (например, « C:\Program Files\Java\jdk-15.0.xx ").
    4. ОК ⇒ ОК ⇒ ОК.
  8. Для измените существующую настройку " JAVA_HOME ":
    1. Выберите " JAVA_HOME " ⇒ "Редактировать"
    2. В «Значение переменной» нажмите «Обзор каталога...» и перейдите в каталог с установленным JDK (например, « C:\Program Files\Java\jdk-15.0.xx »).
    3. ОК ⇒ ОК ⇒ ОК.

Вам необходимо ПЕРЕЗАПУСТИТЬ CMD, чтобы новые настройки вступили в силу!

Чтобы проверить новую настройку, перезапустите CMD:

  установить JAVA_HOME 
JAVA_NAME=C:\Program Files\Java\jdk-13.0.1 
Как установить JAVA_HOME в Linux/macOS (Bash Shell)

Сначала проверьте, установлен ли уже JAVA_HOME , запустив терминал, и введите:

  echo $JAVA_HOME  

JAVA_HOME должен быть установлен в установленный каталог JDK. Вам нужно найти каталог с установленным JDK.

[TODO] найти установленный каталог macOS и Ubuntu JDK.

Добавьте следующую строку в конце "~/.bashrc " (или " ~/.login "). Обратите внимание, что имя файла, начинающееся с точки ( . ), по умолчанию скрыто.

[TODO] Как отобразить скрытие для macOS/Ubuntu.

export JAVA_HOME=/path/to/JDK-installed-directory 

Чтобы новые настройки вступили в силу, необходимо обновить оболочку bash. Введите команду « source » следующим образом:

// Обновить оболочку Bash
  источник ~/.bashrc  // или "источник ~/.login"

// Проверяем новую настройку
  echo $JAVA_HOME  

Windows и Unix/macOS

Java не зависит от платформы. Классы Java работают как в Windows, так и в Unix-совместимых двоичных файлах.

  • В Unix есть много оболочек, таких как более новая bash и более старая csh , ksh . В Windows есть две оболочки: более новая cmd.exe и более старый command.com . Каждая оболочка поставляется со своим набором команд, утилит и собственным языком программирования сценариев.
  • Имя переменной Unix обозначается как $ varname , например, $CLASSPATH . Windows использует % varname % , например, %CLASSPATH% .
  • Unix использует команду " printenv " (среда печати) или " env " для вывода списка всех переменных среды. Windows использует команду " комплект ".
  • Unix PATH устанавливается постоянно в сценарии входа в систему или инициализации оболочки (например, « ~/.login », « ~/.profile », « ~/.bashrc », « ~/. bash_profile " или " /etc/profile "). Windows PATH постоянно устанавливается через Панель управления ⇒ Система ⇒ . ...
  • Текущий каталог НЕ включен в PATH Unix неявно. Чтобы запустить программу в текущем каталоге, вам нужно ввести " ./имя_программы "где" . "обозначает текущий каталог. Рекомендуется включать текущий каталог ( . ) в PATH явно. С другой стороны, текущий каталог неявно включается в PATH Windows.
  • Путь Windows включает букву диска и каталоги. У каждого диска есть корневой каталог. Он использует обратную косую черту '\' в качестве разделителя каталогов (например, " c:\jdk1.6\bin "). В путях Linux нет буквы диска. Есть один корень. Unix использует косую черту '/' в качестве разделителя каталогов (например, " /usr/bin/jdk1.6 ").
  • Windows использует точку с запятой ';' в качестве разделителя пути (например, в переменной среды PATH ), в то время как Unix использует двоеточие ':' .
  • Windows/DOS использует " 0D0AH " (возврат каретки плюс перевод строки) в качестве разрыва строки (или конца строки (EOL) или новой строки). Unix/macOS использует только « 0AH » (перевод строки).

Команда SET — отображение или изменение переменных среды

Цель: Дисплей, создание, модифицировать или удалить переменные среды

FORMAT:. P /S /U /V /X] [подстановочное имя]

 

Режим определения:

SET [/= /A /B /D /M /O /S /U /V /E /RO /R [файл ...] /T:тип | имя=значение | приглашение ]

 

Режим удаления:

SET [/= /D /M /S /U /V /E ] name=

 

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

имя Имя переменной среды.

значение Новое значение переменной, отделенное от имени пробелом[s].

приглашение Дополнительное приглашение ввода для параметра /P name=.

подстановочное имя Имя отображаемой переменной[ов]. Может содержать подстановочный знак *, если не отображаются переменные реестра.

 

Арифметика

Чтение из файла(ов)

Переменная дозирования

/RO

Переменная только для чтения

По умолчанию

/S

Система

Окружающая среда тоже

/Т:тип

Установить тип переменной

Основная среда

Пользователь

Пауза или подсказка

Летучий

Не перезаписывать

Переопределить переменнуюExclude

/Q

Не повторять /результат



 

См. также: ESET и UNSET.

 

Синтаксис завершения файла:

 

Синтаксис завершения имени файла по умолчанию: [/r] * [1] переменные [2*] *

 

Использование:

 

Каждая программа и команда наследует среду, которая представляет собой список пар имен переменных и значений. Каждое значение представляет собой непустую строку символов (т. е. в ней должен быть хотя бы один символ). Многие программы используют записи в среде для изменения своих собственных действий. Сам TCC использует несколько переменных среды.

 

Если вы просто наберете команду SET без опций или параметров, она отобразит все имена и значения всех определенных в данный момент переменных в среде. Как правило, вы увидите запись с именем PATH, запись с именем CMDLINE и любые другие переменные среды, установленные вами и вашими программами:0012

 

[c:\] set

PATH=C:\;C:\UTIL

CMDLINE=C:\TCMD\TCSTART.CMD

 

Если ввести только имя и нет переменной с это имя, SET отобразит все переменные среды, имена которых начинаются с имени. Например, если нет переменной pa, следующая команда отобразит все переменные, имена которых начинаются с pa:

 

set pa

 

Приведенная выше команда эквивалентна команде

 

set pa*

 

Если имеется только один параметр и он содержит один или несколько подстановочных знаков  (извините, доступны только *), SET отобразит все соответствующие переменные среды. Вы не можете использовать подстановочные знаки для отображения переменных реестра (/D, /S, /U и /V).

 

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

 

set VariableExclude=proc*;user*

 

(Обратите внимание, что этот параметр не влияет на существование переменных, а только на то, отображаются ли они с помощью SET без аргументов.)

 

Чтобы добавить переменной среды, введите SET, пробел, имя переменной, знак равенства и требуемое значение:

 

set mine=c:\finance\myfiles

 

Имя переменной и текст после знака равенства знак останется таким, каким вы его ввели. Однако при поиске переменной регистр игнорируется; например, MyVar, myvar и MYVAR ссылаются на одну и ту же переменную. Если переменная уже существует, ее значение будет заменено введенным вами новым текстом.

 

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

 

Завершающий пробел в команде SET игнорируется. Чтобы создать переменную с конечным пробелом, используйте пару обратных кавычек после пробела:

 

set mine=%@repeat[20]``

 

делает мои 20 символов пробелов.

 

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

 

Чтобы отобразить содержимое переменной, введите SET плюс имя переменной:

 

set mine

 

Вы можете редактировать переменные среды с помощью команды ESET. Чтобы удалить переменные из среды, используйте UNSET или введите SET, за которым следует имя переменной и знак равенства:

 

set mine=

 

Имя переменной ограничено 1024 символами.

 

Примечание. Вы не можете использовать SET для изменения переменных GOSUB.

 

Размер среды устанавливается автоматически и увеличивается по мере необходимости при добавлении переменных.

 

Переменные реестра

 

Windows хранит некоторые собственные переменные в реестре. Сюда входят переменные по умолчанию, система, пользователь и переменные. Этими переменными можно управлять с помощью параметров /D, /S, /U и /V команды SET соответственно. Например, чтобы отобразить содержимое изменчивой переменной clientname, используйте:

 

set /v clientname

 

Обратите внимание, что установка переменной реестра с использованием одного из параметров /D, /S, /U или /V не будет установите переменную в локальной среде, если вы также не используете параметр /E.

 

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

 

Если установлен параметр конфигурации Обновлять среду при изменении системы, TCC будет отслеживать сообщение WM_SETTINGCHANGE и обновлять среду из записей пользовательского, нестабильного и системного реестра. Обновление выполняется всякий раз, когда TCC отображает приглашение (чтобы предотвратить изменение среды в середине команды).

 

Переменные массива

 

Помимо переменных среды, SET также используется для установки значений переменных массива. Например, чтобы определить массив из 5 строк на 10 столбцов, вы должны сначала использовать SETARRAY:

 

setarray array1[5,10]

 

Для установки значений массива (на основе 0) используется синтаксис :

 

set array1[a[b[c[d]]]

 

Например:

 

set array1[0,0]=Bob

set array1[0,1]=Задание Боба

 

Чтобы расширить переменную массива:

 

echo Имя – %array[0,0], а задание – %array1[0,1]

 

Параметры:

 

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

 

/A Вычислите арифметическое выражение справа от знака равенства, поместите результат в среду и отобразите его. Например, эта команда складывает 2 и 2 и помещает результат в переменную среды VAR:

 

set /a var=2+2

 

интерпретирует неамериканские строки. value в качестве имен переменных среды, независимо от того, предшествует ли им знак процента %, и заменяет их соответствующими значениями. Например, эта последовательность установит Y на 4:

 

set x=2

set /a y=x+2

Вы можете использовать @EVAL для выполнения той же задачи; SET /A включен для совместимости с CMD. В отличие от @EVAL, использование операторов сдвига >> или << в SET /A требует отключения их интерпретации как символов перенаправления с помощью SETDOS /X-6.

 

/B Установите пакетную переменную (%1 - %n). Действителен только тогда, когда TCC выполняет пакетный файл. Пакетная переменная %n уже должна существовать.

 

/D Создание/изменение/удаление переменной по умолчанию в реестре (HKU\.DEFAULT\Environment).

 

/E При использовании вместе с одним из /D, /S, /U или /V задайте как переменную реестра, так и локальную переменную среды.

 

/M Если указано имя переменной, измените его на исходное значение при запуске TCC. Если имя не указано, верните всю среду к исходной среде при запуске TCC.

 

/O Не перезаписывать существующие значения (действительно только в сочетании с /R).

 

/P При использовании без имени переменной дождитесь нажатия клавиши после каждой страницы экрана, прежде чем продолжить отображение. Ваши параметры в подсказке подробно объясняются в разделе «Подсказки страницы и файла».

 

При использовании с именем переменной и необязательной строкой приглашения, например. set /p myvar=Введите значение, эмулирует поведение CMD, разрешая ввод значения для переменной. Это предусмотрено только для совместимости. Для большей гибкости используйте команды TCC ESET или INPUT.

 

/Q Не отображать результат /A в командной строке.

 

/R Чтение переменных среды из файла. Это намного быстрее, чем загрузка переменных из пакетного файла с помощью нескольких команд SET. Каждая запись в файле должна соответствовать ограничениям длины командной строки для TCC. Файл имеет тот же формат, что и отображение SET (т. е. имя = значение), поэтому SET /R может принимать в качестве входных данных файл, сгенерированный путем перенаправления вывода SET. Например, следующие команды сохранят переменные среды в файл, а затем перезагрузят их из этого файла:

 

set > varlist

set /r varlist

 

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

 

Если вы создаете файл SET /R вручную и вам необходимо создать запись, которая занимает несколько строк в файле, вы можете сделать это, завершив каждую строку (кроме последней) escape-символом. Однако вы не можете использовать этот метод для превышения ограничения длины командной строки. Вы также можете добавить строки комментариев к файлу, начав каждую с двоеточия:. Вы также можете использовать другие специальные символы, например, конечные пробелы, символы перенаправления и вертикальной черты (<>|), без необходимости экранирования символов. Если вы ссылаетесь на значение другой переменной в value (например, x=%path;c:\jpsoft), оценка этой переменной (path в примере) откладывается до тех пор, пока в будущем командная строка не оценит текущую переменную (x в пример), так что команда echo %x будет отображать путь, действующий при выполнении echo, независимо от того, какой путь мог быть, когда исходный SET определил x.

 

Если вы не укажете имя файла и ввод будет перенаправлен, SET /R будет считывать со стандартного ввода.

 

/RO Создайте переменную только для чтения. После того, как вы установили переменную, вы не можете изменить ее или ОТМЕНИТЬ. Только переменные среды могут быть доступны только для чтения, но не переменные реестра или переменные массива. Переменная только для чтения будет автоматически экспортирована из ENDLOCAL.

 

/S Создать/изменить/удалить системную переменную в реестре (HKLM\System\CurrentControlSet\Control\Session Manager\Environment).

 

/T:type[:"regex"] Установить тип переменной. Если вы попытаетесь установить для переменной несовместимый тип, SET вернет ошибку. Поддерживаемые типы:

 

int (или 1) Переменная может содержать только 0-9

dec (or 2) The variable can only contain 0-9, the decimal character, and the thousands separator

hex (or 3) The variable can only содержать 0-9 и A-F

BOOL (или 4) В переменной может содержать только 0 или 1

70350 70350 70350 70350 70350. и аз
ALPHA (OR 5)

Алнум (или 6) Вариант может содержать только A-Z, A-z и 0-9

. выражение

 

/U Создание/изменение/удаление пользовательской переменной в реестре (HKCU\Environment).

 

Создать/изменить/удалить энергозависимую переменную в реестре (HKCU\Volatile Environment).

 

/X Переопределите переменную VariableExclude и отобразите все соответствующие переменные.

 

Использование команды Linux set

Unix как второй язык

org/Person" itemprop="author"> Сандра Генри-Стокер, Юникс Двиб, Сетевой мир |

Гремлин / Getty Images

Команда Linux set позволяет изменить значение параметров оболочки или отобразить имена и значения переменных оболочки. Редко используемый, это встроенный bash, но он немного сложнее, чем большинство встроенных.

Если вы используете команду без каких-либо аргументов, вы получите список всех настроек — имена и значения всех переменных оболочки и функций. Будьте осторожны! Вы получите поток вывода, текущий по вашему экрану. В моей системе Fedora не хватает 3000 строк вывода:

 $ набор | туалет -л
2954 

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

 $ набор | голова -10
BASH=/бин/баш
BASHOPTS=cdspell:checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:globasciiranges:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="11")
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="0" [3]="1" [4]="выпуск" [5]="x86_64-redhat-linux-gnu ")
 

На практике есть несколько очень полезных вещей, которые вы можете делать с набором . Рассмотрим некоторые из них.

Отладка сценариев

Вы можете использовать команду set -x для выполнения некоторой отладки сценариев. Другими словами, когда вы используете эту опцию, bash покажет вам намного больше вывода, который показывает, что делает ваш скрипт. Сценарий, используемый в этом примере, выполняет множество проверок, а затем печатает верхние строки выбранного файла.

 #!/бин/баш
установить -х
если [ $# -lt 2 ]; тогда
    echo "Использование: $0 строк имя файла"
    выход 1
фи
если [ ! -f $2]; тогда
    echo "Ошибка: файл $2 не найден"
    выход 3
еще
    повторить начало файла
    голова -$1 $2
фи
msg="пока"
эхо $сообщение
 

Без set -x вывод сценария будет выглядеть следующим образом:

 $ script3 3 file
начало файла
#!/бин/баш -x
свидание
до свидания
 

С set -x он показывает каждую команду, как она выполняется, а также вывод.

 $ script3 3 файл
+ ‘[‘ 2 -lt 2 ‘]’
+ [[ 3 != [0-9]* ]]
+ ‘[‘ ‘!’ -f файл ‘]’
+ повторить начало файла
начало файла
+ голова -3 файл
#!/бин/баш -х
свидание
+ сообщение=пока
+ эхо до свидания
до свидания
 

Вы также можете вызвать отладку, поместив -x в «строке shebang» (т. е. в верхней строке скрипта) следующим образом:

 #!/bin/bash -x
 

Одним из преимуществ использования set -x , а затем set +x является то, что первый set запускает отладку, а второй set отключает ее, так что вы можете увидеть подробный вывод для небольшого раздел сценария, если это все, на чем вам нужно сосредоточиться.

 набор -х
если [ ! -f $2]; тогда
    echo "Ошибка: файл $2 не найден"
    выход 3
еще
    повторить начало файла
    голова -$1 $2
фи
установить +х
 

Другие опции set можно включать и выключать таким же образом.

Автоматический экспорт

Используя set -a , вы можете автоматически экспортировать любую созданную вами переменную или функцию, чтобы подоболочки и сценарии могли их использовать. Вот пример:

 $ set -a
$ один=1
$ два=2
$ три = 3
$ четыре=4
$ /bin/bash <== запустить новую оболочку
$ эхо $ один $ два $ три $ четыре
1 2 3 4
 

Немедленный выход в случае сбоя команды

Команда set -e приведет к завершению сценария, как только он столкнется с ошибкой. В этом примере вызывается команда set -e .

 $ сценарий кошки1
#!/бин/баш
установить -е
кот nosuchfile
эхо «Пока!»
 

Как вы могли догадаться, файла «nosuchfile» не существует, поэтому скрипт завершает работу в этот момент с помощью set -e . Последняя команда echo никогда не будет запущена.

 $ скрипт1
cat: nosuchfile: Нет такого файла или каталога
 

Не игнорировать несуществующие переменные

По умолчанию bash игнорирует несуществующие переменные. Например, в приведенном ниже сценарии bash пропустит тот факт, что $var2 не определено, и просто отобразит $var1 .

 $ сценарий кошки1
#!/бин/баш
переменная1="123"
эхо $var1 $var2
$ ./скрипт1
123
 

Если вы добавите в сценарий set -u , он сообщит о проблеме.

 $ кот скрипт2
#!/бин/баш
установить -у
переменная1="123"
эхо $var1 $var2
 
 $ ./script2
./script1: строка 5: var2: несвязанная переменная
 

Доступно много дополнительных опций набора , но это одни из самых полезных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *