Скриптовый язык
- Комментарии
- Литералы и переменные
- Предопределенные переменные
- Последовательное исполнение команд, перенаправление вывода
- Замыкания
- Управление ходом исполнения
- Служебные команды
- Взаимодействие с Java
Комментарии
Символ решетка (#) и остаток строки после него — это комментарий.
Если скрипт начинается с комментария, то этот комментарий трактуется как справка о скрипте, и он будет показан командой help.
Литералы и переменные
Поддерживаются следующие типы литералов:
- Строка:
"abcd", кавычки не обязательны; - Список:
[1 2 a b]; - Словарь:
[Jan=1 Feb=2 Mar=3]; - Замыкание:
{ echo hi $args }(подробнее).
Определить переменную можно так: a = test. Получить значение
переменной: $a.
Предопределенные переменные
При выполнении скрипта следующие переменные определены автоматически:
$0— путь к файлу исполняемого скрипта. В случае поставляемого скрипта это путь к ресурсу (см. раздел «Поставка скриптов»);$argc— количество переданных аргументов;$1, $2, ...— аргументы, переданные скрипту.
Последовательное исполнение команд, перенаправление вывода
Чтобы последовательно выполнить несколько команд в одной строке, используйте символ
точки с запятой (;):
echo a; echo b
Поддерживается перенаправление вывода одной команды на ввод другой (pipes):
1C:EDT> platform-versions | grep 8.3.22
8.3.22
true
Вывод команды можно перенаправить в переменную с помощью скобок:
1C:EDT> q = (echo abcd)
abcd
1C:EDT> $q
abcd
Вывод команды можно перенаправить в файл с помощью символа правой угловой скобки
>:
1C:EDT> platform-versions > /home/test/platform-versions.txt
1C:EDT>
Замыкания
Замыкание это блок кода, который может быть сохранен в переменную или передан как аргумент в команду для исполнения позднее. Оформляется фигурными скобками:
1C:EDT> hi-func = { echo Привет, $args! }
echo Привет, $args!
1C:EDT> hi-func Имярек
Привет, Имярек!
В интерактивном режиме замыкания могут быть только однострочными. В скриптах возможны многострочные замыкания. В этом случае открывающая фигурная скобка должна быть на той же строке.
Правильно:
hi-func = {
echo Привет, $args!
echo Как дела?
}
Неправильно:
hi-func =
{
echo Привет, $args!
echo Как дела?
}
Управление ходом исполнения
Команды управления ходом исполнения получают на вход замыкания, к ним применяются правила оформления замыканий.
Правильно:
if { условие } {
действие
}
Неправильно:
if { условие }
{
действие
}
-
- Ветвление
-
if { условие } { действие, если условие истинно } { действие, если условие ложно }Последний блок, else, необязателен и может быть опущен.
В качестве условия может выступать результат выполнения команды, скрипта или значение переменной. Следующие значения считаются ложными:
- null;
- false (булево значение);
- 0 (число);
- 0 (строка);
- пустая строка;
- строка, состоящая из одних пробельных символов;
- любая пустая коллекция.
Остальные значения считаются истинными.
Инвертировать условия можно командой
not { условие }.
- Циклы
-
while { условие } { действие, пока условие истинно } until { условие } { действие, пока условие ложно }Условие истинности такое же, как для ветвлений.
each $коллекция { действие }Выполняет действие для каждого элемента коллекции. Текущий элемент доступен в переменной
it, см. пример 2.
- Работа с исключениями
-
try { основное действие } { действие в случае исключения } { завершающее действие } # аналогично первому варианту, но более читабельно: try { основное действие } catch { действие в случае исключения } finally { завершающее действие }Аналог try / catch / finally в Java. Выполняется основное действие. Если выпало исключение, то выполняется действие в случае исключения. Завершающее действие выполняется всегда.
Третий блок, finally, не обязателен и может быть опущен.
Если нужно сделать try / finally (без catch), используйте следующую форму:
try { основное действие } finally { завершающее действие }Бросить исключение:
throw строка/число/любой объектЕсли выброшено исключение, оно будет доступно в переменной exception. В переменной будет хранится объект исключения, у него можно вызвать методы, например, message или printStackTrace:
1C:EDT> throw "Произошла ошибка" edtsh: Произошла ошибка Введите '$exception printStackTrace' для получения детальной информации об ошибке. 1C:EDT> $exception message Произошла ошибкаУспешное выполненные команды обнуляют переменную exception. Если информация об исключении нужна позднее, сохраните его в другую переменную:
handle_later = $exception.
Служебные команды
-
- echo: вывод
-
1C:EDT> echo Всем привет! Всем привет!
- grep: поиск
-
1C:EDT> platform-versions | grep -q 8.3.24 trueНеобязательные аргументы:
- -i, --ignore-case — игнорировать регистр символов;
- -n, --line-number — добавить к каждой строке номер строки;
- -q, --quiet, --silent — подавить весь нормальный вывод;
- -v, --invert-match — выбрать несовпадающие строки (инверсия).
- cat: чтение файлов
-
cat /home/test/hello.txtВыводит содержимое файла в консоль.
- cd: текущий рабочий каталог
-
cd cd /path/to/new/working/directoryПервый вариант выводит текущий рабочий каталог, относительно которого определяются все относительные пути. Второй вариант меняет текущий рабочий каталог на указанный.
- env: переменные окружения
-
env env PATHПервый вариант выводит список всех переменных окружения. Второй вариант выводит значение указанной переменной окружения.
Взаимодействие с Java
Все переменные являются объектами Java определенных типов, у них можно вызывать методы и считывать свойства. Синтаксис следующий:
$<имя переменной> <имя метода или свойства> [аргументы]
Например:
1C:EDT> a = [1 2 abcd]
1
2
abcd
1C:EDT> $a size
3
1C:EDT> $a get 2
abcd
1C:EDT>
В этом примере вы создаете список из 3 элементов. Переменная a после
этого имеет тип java.util.List<Object>. Далее вы вызываете
метод size() у этого объекта и получаете размер списка. После
чего вы вызываете метод get(2), чтобы получить последний
элемент.
Если у типа есть геттер (метод вида getSomething()), то его можно
вызвать как $a something (без get). См. последний
пример работы с
исключениями):
$exception message
Здесь вызывается метод getMessage() у объекта исключения.