如何用jq在Bash脚本中判断仓库响应是否含非点文件与README内容?
问题解决:Bash脚本中通过jq判断仓库内容类型
可以通过jq的条件判断和过滤能力精准识别三种响应类型,以下是修改后的完整脚本:
#!/bin/bash for repo_name in "${repos_name[@]}"; do content=$(curl -s http://example.com/$repo_name) # 判断仓库是否不存在 if echo "$content" | jq -e '.message == "The repo doesn'"'"'t exist"' >/dev/null; then echo "仓库 $repo_name 不存在" continue fi # 判断是否存在有效内容:至少有一个文件既不是点文件也不是README.md if echo "$content" | jq -e 'all(.[]; .name | startswith(".") or .name == "README.md") | not' >/dev/null; then # 此处执行目标命令 echo "仓库 $repo_name 存在有效内容,执行命令..." # your_command_here else echo "仓库 $repo_name 存在但无有效内容" fi done
关键jq逻辑解释
.message == "The repo doesn'"'"'t exist":检查响应是否为“仓库不存在”的JSON对象,Bash中单引号通过'"'"'转义;-e参数让jq根据判断结果返回对应退出码(true返回0,false返回1),适配Bash的条件判断。all(.[]; .name | startswith(".") or .name == "README.md") | not:先判断所有文件是否都是点文件或README.md,再取反,等价于“存在至少一个既不是点文件也不是README.md的有效文件”,写法更简洁。
内容的提问来源于stack exchange,提问作者KaMZaTa
相关产品推荐
相关产品推荐

