文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Shell工具jsondiff.sh怎么用

2023-06-16 18:12

关注

今天就跟大家聊聊有关Shell工具jsondiff.sh怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

我最近忙着重构一个历史项目,不过由于客观条件所限,没有测试用例可用,以至于我不得不通过人肉对比新旧服务器的结果集是否一致来判断对错。既然说懒惰是程序员的美德,所以我想还是写一个工具吧,加之结果集为JSON,于是便有了jsondiff.sh。

逻辑很简单,无非就是通过curl在不同的服务器上取得结果集,然后diff即可,不过这里有几点需要注意的地方:首先,JSON就一行,直接diff会失去意义;其次,JSON中汉字会被编码,不利于查看;另外,JSON中字段顺序是无所谓的,所以diff前***排序。说明一下,在格式化JSON数据的时候,我没有用Bash,而是用的PHP:

#!/bin/bash RM=/bin/rm PHP=/usr/bin/php CURL=/usr/bin/curl DIFF=/usr/bin/diff VIMDIFF=/usr/bin/vimdiff COLORDIFF=/usr/bin/colordiff usage() {     echo "Usage: $0 --uri=<URI> --old=<IP> --new=<IP>" } format() {     $PHP -R '         function ksort_recursive(&$array) {             if (!is_array($array)) {                 return;             }             ksort($array);              foreach (array_keys($array) as $key) {                 ksort_recursive($array[$key]);             }         }         $options = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE;          $array = json_decode($argn, true);         ksort_recursive($array);          echo json_encode($array, $options);     ' } request() {     $CURL -s -H "Host: $1" "http://$2$3" }  eval set -- $(     getopt -q -o "h" -l "host:,uri:,old:,new:,vim,help" -- "$@" ) while true; do     case "$1" in         --host)    HOST=$2; shift 2;;         --uri)     URI=$2;  shift 2;;         --old)     OLD=$2;  shift 2;;         --new)     NEW=$2;  shift 2;;         --vim)     VIM="Y"; shift 1;;         -h|--help) usage;   exit 0;;         --)                 break;;     esac done if [[ -z "$URI" || -z "$OLD" || -z "$NEW" ]]; then     usage     exit 1 fi if [[ -z "$HOST" ]]; then     HOST="www.foobar.com" fi OLD_FILE=$(mktemp) NEW_FILE=$(mktemp) request "$HOST" "$OLD" "$URI" | format > $OLD_FILE request "$HOST" "$NEW" "$URI" | format > $NEW_FILE if [[ "$VIM" == "Y" ]]; then     $VIMDIFF $OLD_FILE $NEW_FILE elif [[ -x "$COLORDIFF" ]]; then     $COLORDIFF -u $OLD_FILE $NEW_FILE else     $DIFF -u $OLD_FILE $NEW_FILE fi $RM -f $OLD_FILE $RM -f $NEW_FILE

其中「getopt」的用法值得注意一下,相关参考资料如下:

Getopt in Bash Bash: Preserving Whitespace Using set and eval

虽然我的Shell水平有限,但是我尽可能写得易用:在diff的时候,允许使用多种工具,缺省情况下会优先使用「colordiff」,需要的话还可以激活「vimdiff」。

看完上述内容,你们对Shell工具jsondiff.sh怎么用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯