如何编写Bash骨架脚本:处理JSON设备文件生成合规Kafka事件
编写Bash骨架脚本实现DEVICE_PROVISION_EVENT生成
依赖工具
确保系统已安装以下工具:
jq:用于JSON解析与构建,保证JSON格式合规uuidgen:生成符合要求的UUID事件IDdate(coreutils包):生成标准格式的本地时间戳
完整骨架脚本
#!/bin/bash # 配置参数:指定设备JSON文件所在文件夹 INPUT_DIR="/path/to/your/device/json/folder" # 检查输入文件夹是否存在 if [ ! -d "$INPUT_DIR" ]; then echo "错误:输入文件夹 $INPUT_DIR 不存在" exit 1 fi # 遍历文件夹内所有JSON文件 for json_file in "$INPUT_DIR"/*.json; do # 跳过非文件(比如匹配不到文件时的通配符本身) [ -f "$json_file" ] || continue echo "正在处理文件:$json_file" # 1. 读取并转义设备JSON内容,确保可嵌入Kafka事件的data字段 # 使用jq的@json过滤器完成标准JSON转义,避免手动转义出错 escaped_device_data=$(jq -c . "$json_file" | jq -R @json) # 2. 生成事件ID(UUID) event_id=$(uuidgen) # 3. 生成符合RFC3339标准的本地时间戳 event_time=$(date --iso-8601=seconds) # 4. 构建合规的DEVICE_PROVISION_EVENT事件 kafka_event=$(jq -n \ --arg specversion "4.0" \ --arg id "$event_id" \ --arg source "CCS" \ --arg type "DEVICE_PROVISION_EVENT" \ --arg time "$event_time" \ --arg data "$escaped_device_data" \ '{ specversion: $specversion, id: $id, source: $source, type: $type, time: $time, data: $data }') # 输出事件(可替换为发送到Kafka的命令,比如kafka-console-producer.sh) echo "生成的Kafka事件:" echo "$kafka_event" echo "----------------------------------------" # 可选:发送到Kafka示例(需配置Kafka地址与主题) # echo "$kafka_event" | kafka-console-producer.sh --broker-list localhost:9092 --topic your_topic_name done exit 0
关键部分说明
- JSON转义:使用
jq -c .将设备JSON压缩为单行,再通过jq -R @json完成标准转义,确保双引号、换行符等特殊字符被正确处理,避免破坏外层Kafka事件的JSON结构。 - 事件ID生成:
uuidgen默认生成UUIDv4格式字符串,符合事件ID唯一性要求。 - 时间戳:
date --iso-8601=seconds生成YYYY-MM-DDTHH:MM:SS+HH:MM格式的本地时间戳,符合CloudEvents规范的时间格式要求。 - 事件构建:通过
jq的变量替换功能构建事件,避免手动拼接JSON时出现语法错误,保证输出的JSON完全合规。
内容的提问来源于stack exchange,提问作者user19748285
相关产品推荐
相关产品推荐

