Shell工具:jsondiff.sh

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

  1. #!/bin/bash
  2. RM=/bin/rm
  3. PHP=/usr/bin/php
  4. CURL=/usr/bin/curl
  5. DIFF=/usr/bin/diff
  6. VIMDIFF=/usr/bin/vimdiff
  7. COLORDIFF=/usr/bin/colordiff
  8. usage() {
  9. echo "Usage: $0 --uri=<URI> --old=<IP> --new=<IP>"
  10. }
  11. format() {
  12. $PHP -R ‘
  13. function ksort_recursive(&$array) {
  14. if (!is_array($array)) {
  15. return;
  16. }
  17. ksort($array);
  18. foreach (array_keys($array) as $key) {
  19. ksort_recursive($array[$key]);
  20. }
  21. }
  22. $options = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE;
  23. $array = json_decode($argn, true);
  24. ksort_recursive($array);
  25. echo json_encode($array, $options);
  26. }
  27. request() {
  28. $CURL -s -H "Host: $1" "http://$2$3"
  29. }
  30. eval set -- $(
  31. getopt -q -o "h" -l "host:,uri:,old:,new:,vim,help" -- "[email protected]"
  32. )
  33. while true; do
  34. case "$1" in
  35. --host)    HOST=$2; shift 2;;
  36. --uri)     URI=$2;  shift 2;;
  37. --old)     OLD=$2;  shift 2;;
  38. --new)     NEW=$2;  shift 2;;
  39. --vim)     VIM="Y"; shift 1;;
  40. -h|--help) usage;   exit 0;;
  41. --)                 break;;
  42. esac
  43. done
  44. if [[ -z "$URI" || -z "$OLD" || -z "$NEW" ]]; then
  45. usage
  46. exit 1
  47. fi
  48. if [[ -z "$HOST" ]]; then
  49. HOST="www.foobar.com"
  50. fi
  51. OLD_FILE=$(mktemp)
  52. NEW_FILE=$(mktemp)
  53. request "$HOST" "$OLD" "$URI" | format > $OLD_FILE
  54. request "$HOST" "$NEW" "$URI" | format > $NEW_FILE
  55. if [[ "$VIM" == "Y" ]]; then
  56. $VIMDIFF $OLD_FILE $NEW_FILE
  57. elif [[ -x "$COLORDIFF" ]]; then
  58. $COLORDIFF -u $OLD_FILE $NEW_FILE
  59. else
  60. $DIFF -u $OLD_FILE $NEW_FILE
  61. fi
  62. $RM -f $OLD_FILE
  63. $RM -f $NEW_FILE

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

  1. Getopt in Bash
  2. Bash: Preserving Whitespace Using set and eval

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

时间: 2024-10-04 16:28:54

Shell工具:jsondiff.sh的相关文章

二、hbase shell工具

hbase单节点安装请参考: https://www.cnblogs.com/lay2017/p/9944387.html 下文演示hbase shell工具常用的命令,首先启动hbase以及进入shell bin/start-hbase.sh hbase shell 进入shell如下 shell相关命令 查看状态 查看版本 create 以下创建了一个'test'表,以及'cf'列簇 list 列出所有的表,这里已经存在着test,userlist表 put 以下演示向test表的第1行,c

两个有用的shell工具总结

shell工具之一:sed sed基础 sed编辑器被称作流编辑器,与常见的交互式文本编辑器刚好相反.文本编辑器可以通过键盘来交互式地插入.删除.替换文本中的数据:而流编辑器是基于一组预先的规则来编辑数据流. sed命令的格式如下: sed options script file 选项 说明 -e script 将script中指定的命令添加到运行的命令中 -f file 将file中指定的命令添加到运行的命令中 -n 不为每个命令生成输出,等待print命令来输出 说明: script用于指定

使用远程shell工具SSH登录Linux主机,输完用户名回车后就卡住,10秒后才提示输入密码

使用远程shell工具SSH登录Linux主机,输完用户名回车后就卡住,10秒后才提示输入密码. 使用wireshark抓全过程包 因为ssh是加密了的协议,所以弄不懂里面内容是正常的,但可以加以过滤. 过滤栏:SSH 找到时间间隔大概为10s的NO.是x到y 过滤栏:frame.number>x&&frame.number<y 观察得出此处是DNS查询行为 原因:Linux服务器在收到SSH访问请求时,先会查询该客户端IP对应的PTR记录.假如经过5s没有收到回复,就再次发一

ipython是python的交互式shell工具

ipython: 是python的交互式shell工具,比默认的python shell工具要好用.支持变了自动补全,自动缩进,内置了很多的功能和函数 启动:可以通过cmd来启动该工具 自动补全: In [12]: import os In [13]: os.w  #直接回车,会自动显示出来该模块下的所有方法,如果我们忘记了os模块的方法具有哪些,方法记不全就可以采用这个办法os.waitpid os.walk os.write %env显示环境变量 %hist 或 %history显示历史记录

ssl 安全测试工具 testssl.sh 和LogJam攻击

举几个工作中用到的安全测试工具 testssl.sh 官方网站:https://testssl.sh 这是一个傻瓜式操作的工具,clone到本地之后,直接执行命令 testssl.sh www.baidu.com 就可以执行测试 再此介绍一下 LogJam: Logjam攻击会对TLS协议进行攻击.Logjam攻击将会允许一个使用中间人攻击的黑客将TLS链接的加密算法的输出级别降至512位.这样会使得攻击者能够读取和修改使用这个链接进行传输的所有数据信息.Logjam攻击让我们想起了FREAK攻

linux文本常用shell工具

下面将介绍Linux下使用Shell处理文本时最常用的工具:find.grep.xargs.sort.uniq.tr.cut.paste.wc.sed.awk:提供的例子和参数都是最常用和最为实用的: 我对shell脚本使用的原则是命令单行书写,尽量不要超过2行:如果有更为复杂的任务需求,还是考虑python吧: find 文件查找 查找txt和pdf文件 [indent]  find . \( -name "*.txt" -o -name "*.pdf" \) -

7、Shell工具 cut sed awk sort

1 cut cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的.cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段输出. 1.基本用法 cut [选项参数]  filename 说明:默认分隔符是制表符 2.选项参数说明 表1-55 选项参数 功能 -f 列号,提取第几列 -d 分隔符,按照指定分隔符分割列 -c 指定具体的字符 cut -c 2,3,4     cut -c 2-8   2-8之间的字符 3.案例实操 (0)数据准备 [[email protect

Ubuntn16 部署shellinabox--web shell工具

shellinabox简介 通常情况下,我们在访问任何远程服务器时,会使用常见的通信工具如OpenSSH和Putty等.但是,有可能我们在防火墙后面不能使用这些工具访问远程系统,或者防火墙只允许HTTPS流量才能通过.不用担心!即使你在这样的防火墙后面,我们依然有办法来访问你的远程系统.而且,你不需要安装任何类似于OpenSSH或Putty的通讯工具.你只需要有一个支持JavaScript和CSS的现代浏览器,并且你不用安装任何插件或第三方应用软件. 这个 Shell In A Box,发音是s

Mac 安装Shell工具 zsh

自动安装: 当然,如果你信任这个开源项目作者的话你可以尝试使用自动安装的方法. wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh 手动安装: 1. 克隆这个项目到本地(前提是你得有装git) git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh 2. 创建一个zsh的配置文件注意:如果你已经有一个~