forループと「配列」を含むシェルスクリプト

forループと「配列」を含むシェルスクリプト

forループと配列でこのシェルスクリプトを使用する方法。 Sonarqube品質ゲート生成条件を生成するためにforループ呼び出しを使用したいと思います。例:

#!/bin/bash --login

echo "Creating SonarQube Gateway Condition"

QG_ID=$(cat qualitygate.json | jq -r ".id")
Gateway="curl -u ${USERNAME}:${PASSWORD} -k -X POST "${SONAR_HOST_URL}/api/qualitygates/create_condition?"
declare -a gateMetrics=("gateId=$QG_ID&metric=coverage&op=LT&error=80\"" "gateId=$QG_ID&metric=duplicated_lines_density&op=GT&error=10\"")

for val in "${gateMetrics[@]}"
do
  echo $Gateway$val
done

上記のコマンドを実行した後、次の出力が必要です。

curl -u ${USERNAME}:${PASSWORD} -k -X POST "${SONAR_HOST_URL}/api/qualitygates/create_condition?gateId=$QG_ID&metric=coverage&op=LT&error=80"

ベストアンサー1

より小さな部分に分けることができます。

#!/bin/bash --login

echo "Creating SonarQube Gateway Condition"

curl_cmd=( curl -u "${USERNAME}:${PASSWORD}" -k -X POST )
url="${SONAR_HOST_URL}/api/qualitygates/create_condition"
qg_id=$( jq -r ".id" qualitygate.json )
gateMetrics=(
    coverage,LT,80
    duplicated_lines_density,GT,10
)
query_fmt="gateId=%s&metric=%s&op=%s&error=%s"

for metric in "${gateMetrics[@]}"; do
    IFS=, read -r m o e <<< "$metric"
    printf -v query "$query_fmt" "$qg_id" "$m" "$o" "$e"

    # remove this echo if it looks OK
    echo "${curl_cmd[@]}" "${url}?${query}"
done

あなたも読みたいコマンドを変数に入れようとしましたが、複雑な場合は常に失敗します!

おすすめ記事