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
당신도 읽고 싶어명령을 변수에 넣으려고 했지만 복잡한 경우는 항상 실패합니다!
답변2
사용자 이름 변수, 자체 실행 예제를 위해 PASSWORD 및 QG_ID가 추가되었습니다.
#!/bin/bash --login
USERNAME=foo
PASSWORD=bar
SONAR_HOST_URL="https://sonar.example.com"
echo "Creating SonarQube Gateway Condition"
# QG_ID=$(cat qualitygate.json | jq -r ".id")
QG_ID=123456
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
산출:
Creating SonarQube Gateway Condition
curl -u foo:bar -k -X POST "https://sonar.example.com/api/qualitygates/create_condition?gateId=123456&metric=coverage&op=LT&error=80"
curl -u foo:bar -k -X POST "https://sonar.example.com/api/qualitygates/create_condition?gateId=123456&metric=duplicated_lines_density&op=GT&error=10"