Перейти к содержанию

3. Параметры командной строки

← Основы языка · Оглавление · Далее: управляющие конструкции и функции →

Блок params описывает параметры сценария. Он должен находиться в начале скрипта; перед ним допускается только документирующий комментарий ##.

Простой пример

## Скачивает архив.
params {
    ## URL архива.
    $url String

    ## Имя выходного файла.
    $output String = "archive.tar"

    ## Количество повторов.
    $retries Integer = 3
}

println "url=" + $url
println "output=" + $output
println "retries=" + $retries

Запуск:

java -jar jobs.jar download.jobs --url https://example.test/file.tar --retries=5

Параметры передаются как --name value или --name=value.

Обязательные и необязательные параметры

Если у параметра нет значения по умолчанию, он обязателен:

params {
    $input Path
    $verbose Boolean = false
}

Если обязательный параметр не передан, неизвестен или не приводится к нужному типу, интерпретатор печатает help и завершает выполнение с кодом 255.

Поддерживаемые типы

В params обычно используются встроенные типы:

params {
    $name String
    $file Path
    $count Integer = 1
    $ratio Decimal = 0.5
    $enabled Boolean = true
}

Пользовательские конвертеры

Вместо имени типа можно указать функцию-конвертер. Она принимает строку из командной строки и возвращает готовое значение.

params {
    $name Normalize-Name
}

Normalize-Name($value) {
    return "[" + $value.Trim().To-Upper() + "]"
}

println $name

Функции-конвертеры можно объявлять ниже блока params: top-level use и объявления функций подготавливаются до обработки параметров.

Ошибки валидации параметров

Для пользовательских ошибок используйте ParamsException. Внутри обработки параметров она приводит к выводу сообщения, help и коду 255.

params {
    $name Validate-Name
}

Validate-Name($value) {
    if $value.Trim().Is-Empty() {
        throw new ParamsException("Name cannot be empty.")
    }
    return $value.Trim()
}

Любое другое исключение из конвертера считается обычной runtime-ошибкой и выводится со stack trace.

Автоматический help

Документирующие комментарии ## перед params и перед отдельными параметрами попадают в help:

## Создаёт текстовый отчёт.
params {
    ## Исходный CSV-файл.
    $input Path

    ## Папка для результата.
    $out-dir Path = p"build"
}

Вызов help:

java -jar jobs.jar report.jobs --help
java -jar jobs.jar report.jobs -h

← Основы языка · Оглавление · Далее: управляющие конструкции и функции →