Символ решетка (#
) и остаток строки после него — это комментарий.
Если скрипт начинается с комментария, то этот комментарий трактуется как справка о скрипте, и он будет показан командой 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, необязателен и может быть опущен.
В качестве условия может выступать результат выполнения команды, скрипта или значение переменной. Следующие значения считаются ложными:
Остальные значения считаются истинными.
Инвертировать условия можно командой 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
.
1C:EDT> echo Всем привет!
Всем привет!
1C:EDT> platform-versions | grep -q 8.3.24
true
Необязательные аргументы:
cat /home/test/hello.txt
Выводит содержимое файла в консоль.
cd
cd /path/to/new/working/directory
Первый вариант выводит текущий рабочий каталог, относительно которого определяются все относительные пути. Второй вариант меняет текущий рабочий каталог на указанный.
env
env PATH
Первый вариант выводит список всех переменных окружения. Второй вариант выводит значение указанной переменной окружения.
Все переменные являются объектами 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() у объекта исключения.