쉘 스크립트 파일에서 json 변수를 사용하는 방법은 무엇입니까?

쉘 스크립트 파일에서 json 변수를 사용하는 방법은 무엇입니까?

이 json 파일을 사용하여 내 파일을 포함할 젠킨스 버전과 Java 버전 번호를 가져오고 싶습니다 script.sh. 우리는 무엇을 해야 합니까?

나는 그것을 시도했지만 {{user `java_version`}}성공하지 못했습니다.

  • variable.json문서
    {
        "region": "us-east-1",
        "jenkins_version": "2.263.4",
        "java_version": "1.8.0"
    
    }
    
  • script.sh문서
    #!/bin/bash
    sudo yum update -y
    sudo yum install wget -y
    sudo yum install   java-{{user `java_version`}}-openjdk-devel -y
    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    sudo yum install -y jenkins-{{user `java_version`}}
    sudo systemctl start jenkins
    sudo systemctl status jenkins
    #Get auth password from jenkins master
    echo "authpwd="$(sudo cat /var/lib/jenkins/secrets/initialAdminPassword)
    

답변1

명령을 살펴보세요 jq. 명령줄 json 파서입니다. 원하는 필드를 꺼낼 수 있습니다.

https://www.systutorials.com/docs/linux/man/1-jq/

예를 들어, 이는 java_version 번호를 반환합니다.

cat variable.json | jq .java_version

아무것도 설치할 필요가 없도록 core 명령을 사용하려는 경우 이 명령을 사용할 수 있습니다.

cat input | grep java_version | awk '{print $NF}'

누군가가 말하기 전에 위 명령의 짧은 버전인 grep을 입력할 필요가 없다고 말합니다.

grep java_version variable.json | awk '{print $NF}'

편집: 또 다른 옵션은 다음과 같습니다.

sudo yum install -y jenkins-$(grep java_version variable.json | awk '{print $NF}' | sed 's/"//g')-openjdk

관련 정보