Как автоматизировать и обобщить следующую команду - когда она используется в скрипте bash - для разных параметров и значений? - PullRequest
0 голосов
/ 18 января 2019

Я хочу использовать эту команду в скрипте bash, где каждый раз, когда у меня будет другой массив ввода, содержащий параметры?

зная, что у меня есть массив (как ввод от пользователя), где каждый столбец содержит "parameteri=valuei".

Я хочу избавиться от жестко заданного аспекта при введении имени и значения каждого параметра.

Например, с этим вводом:

"id=123,verbosity=high"

Я в конечном итоге получу эту последнюю инструкцию:

curl -X POST JENKINS_URL/job/JOB_NAME/build \
  --user USER:TOKEN \
  --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}'

Что такое чистый способ сделать это?

1 Ответ

0 голосов
/ 18 января 2019

Вы можете сделать это сексуально, создав jsonParameters из указанного key=value parameters:

#!/bin/bash

jsonParameters=""
while IFS=',' read -r -a parameterEntries; do
  for parameterEntry in "${parameterEntries[@]}"; do
    IFS='=' read -r key value <<< "$parameterEntry"
    [ ! -z "$jsonParameters" ] && jsonParameters="$jsonParameters,"
    jsonParameters="$jsonParameters {\"name\":\"$key\", \"value\": \"$value\"}"
  done
done <<< "$@"

Пояснения:

  • первый цикл создаст массив с именем parameterEntries, со всеми указанными вами параметрами, каждый элемент будет содержать key=value
  • затем второй цикл, который выполняет итерацию для каждого элемента этого массива, извлечет ключ и его значение
  • в конце концов, это только запись синтаксиса для получения желаемого вывода JSON
  • [ ! -z "$jsonParameters" ] && jsonParameters="$jsonParameters," здесь для добавления разделяющей комы, только если имеется более одного элемента

Тогда вам просто нужно использовать $jsonParameters там, где вы хотите:

curl -X POST JENKINS_URL/job/JOB_NAME/build \
  --user USER:TOKEN \
  --data-urlencode json="{\"parameter\": [$jsonParameters]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...