シェルスクリプトファイルでjson変数を使用する方法は?

シェルスクリプトファイルでjson変数を使用する方法は?

このjsonファイルを使用して、私のファイルを含むJenkinsバージョンと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

関連情報