如何在shell脚本文件中使用json变量?

如何在shell脚本文件中使用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

如果您更喜欢使用核心命令,这样您就不必安装任何东西,您可以使用此命令。

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

相关内容