如何通过bash脚本传入参数动态生成指定结构的JSON文件
实现方案
你可以通过以下两种方式实现参数替换生成目标JSON文件:
方案1:无额外依赖的Here Document实现
适合传入的hostgroup参数没有特殊字符(引号、换行等)的场景,不需要安装额外工具。
将以下内容保存为myscript文件:
#!/bin/bash # 参数校验 if [ $# -ne 2 ]; then echo "用法: $0 <hostgroup值> <minimum_should_match数值>" exit 1 fi # 生成JSON写入文件 cat > output.json <<EOF { "bool": { "should": [ { "match_phrase": { "hostgroup.keyword": "$1" } } ], "minimum_should_match": $2 } } EOF
操作步骤:
- 给脚本加执行权限:
chmod +x myscript - 执行脚本:
./myscript hostgroup_one 2,执行后会在当前目录生成对应内容的output.json文件
如果需要直接输出JSON内容到终端而非写入文件,把代码里的cat > output.json改成cat即可。
方案2:基于jq的严谨实现(推荐)
如果传入参数可能包含特殊字符,推荐用jq工具生成JSON,会自动转义特殊字符,保证生成的JSON格式合法。
首先确认系统已安装jq,大部分Linux发行版可直接通过包管理器安装:apt install jq 或 yum install jq。
将以下内容保存为myscript文件:
#!/bin/bash # 参数校验 if [ $# -ne 2 ]; then echo "用法: $0 <hostgroup值> <minimum_should_match数值>" exit 1 fi # 调用jq生成合法JSON jq -n \ --arg hg "$1" \ --argjson msm "$2" \ '{ "bool": { "should": [ { "match_phrase": { "hostgroup.keyword": $hg } } ], "minimum_should_match": $msm } }' > output.json
操作步骤和方案1完全一致。
内容的提问来源于stack exchange,提问作者Syirtblplmj
相关产品推荐
相关产品推荐

