成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個Shell工具:jsondiff.sh

系統(tǒng) Linux
我最近忙著重構(gòu)一個歷史項目,不過由于客觀條件所限,沒有測試用例可用,以至于我不得不通過人肉對比新舊服務(wù)器的結(jié)果集是否一致來判斷對錯。既然說懶惰是程序員的美德,所以我想還是寫一個工具吧,加之結(jié)果集為JSON,于是便有了jsondiff.sh。

我最近忙著重構(gòu)一個歷史項目,不過由于客觀條件所限,沒有測試用例可用,以至于我不得不通過人肉對比新舊服務(wù)器的結(jié)果集是否一致來判斷對錯。既然說懶惰是程序員的美德,所以我想還是寫一個工具吧,加之結(jié)果集為JSON,于是便有了jsondiff.sh。

邏輯很簡單,無非就是通過curl在不同的服務(wù)器上取得結(jié)果集,然后diff即可,不過這里有幾點需要注意的地方:首先,JSON就一行,直接diff會失去意義;其次,JSON中漢字會被編碼,不利于查看;另外,JSON中字段順序是無所謂的,所以diff前***排序。說明一下,在格式化JSON數(shù)據(jù)的時候,我沒有用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. format() { 
  11.     $PHP -R ' 
  12.         function ksort_recursive(&$array) { 
  13.             if (!is_array($array)) { 
  14.                 return; 
  15.             } 
  16.             ksort($array); 
  17.  
  18.             foreach (array_keys($array) as $key) { 
  19.                 ksort_recursive($array[$key]); 
  20.             } 
  21.         } 
  22.         $options = JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE; 
  23.  
  24.         $array = json_decode($argn, true); 
  25.         ksort_recursive($array); 
  26.  
  27.         echo json_encode($array, $options); 
  28.     ' 
  29. request() { 
  30.     $CURL -s -H "Host: $1" "http://$2$3" 
  31.  
  32. eval set -- $( 
  33.     getopt -q -o "h" -l "host:,uri:,old:,new:,vim,help" -- "$@" 
  34. while true; do 
  35.     case "$1" in 
  36.         --host)    HOST=$2; shift 2;; 
  37.         --uri)     URI=$2;  shift 2;; 
  38.         --old)     OLD=$2;  shift 2;; 
  39.         --new)     NEW=$2;  shift 2;; 
  40.         --vim)     VIM="Y"; shift 1;; 
  41.         -h|--help) usage;   exit 0;; 
  42.         --)                 break;; 
  43.     esac 
  44. done 
  45. if [[ -z "$URI" || -z "$OLD" || -z "$NEW" ]]; then 
  46.     usage 
  47.     exit 1 
  48. fi 
  49. if [[ -z "$HOST" ]]; then 
  50.     HOST="www.foobar.com" 
  51. fi 
  52. OLD_FILE=$(mktemp) 
  53. NEW_FILE=$(mktemp) 
  54. request "$HOST" "$OLD" "$URI" | format > $OLD_FILE 
  55. request "$HOST" "$NEW" "$URI" | format > $NEW_FILE 
  56. if [[ "$VIM" == "Y" ]]; then 
  57.     $VIMDIFF $OLD_FILE $NEW_FILE 
  58. elif [[ -x "$COLORDIFF" ]]; then 
  59.     $COLORDIFF -u $OLD_FILE $NEW_FILE 
  60. else 
  61.     $DIFF -u $OLD_FILE $NEW_FILE 
  62. fi 
  63. $RM -f $OLD_FILE 
  64. $RM -f $NEW_FILE 

其中「getopt」的用法值得注意一下,相關(guān)參考資料如下:

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

雖然我的Shell水平有限,但是我盡可能寫得易用:在diff的時候,允許使用多種工具,缺省情況下會優(yōu)先使用「colordiff」,需要的話還可以激活「vimdiff」。

責(zé)任編輯:黃丹 來源: 火丁筆記
相關(guān)推薦

2025-01-08 11:00:00

AIshell開源

2022-05-23 08:05:14

benchstat工具Go

2013-06-13 11:07:52

2020-04-06 20:47:42

FishShellLinux

2012-07-17 17:05:55

JavaScript

2022-12-28 12:29:45

duf命令

2017-07-25 14:20:13

戴爾配置功耗

2023-12-11 08:16:51

工具命令行參數(shù)

2020-11-04 07:56:19

工具Linux 翻譯

2021-10-08 19:00:28

NMState網(wǎng)絡(luò)配置工具系統(tǒng)運維

2015-09-09 13:29:17

FISHShellLinux

2021-02-15 17:29:46

LinuxShell腳本

2013-12-18 09:51:02

2009-07-07 11:38:54

jsp oracle

2011-06-17 16:49:05

Cocoa蘋果

2020-07-20 10:00:52

Python翻譯工具命令行

2017-09-07 19:21:20

Java語言Iodine

2025-01-08 08:00:00

2024-01-08 13:47:00

代碼分析工具

2019-08-02 15:39:06

PythonLinuxJSON
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91精品国产一区二区三区蜜臀 | 亚洲夜夜爽 | 欧美一级久久 | 精品综合网 | 正在播放一区二区 | 色约约视频 | 亚洲自拍偷拍av | 午夜在线视频一区二区三区 | 久久中文字幕一区 | 91久久伊人 | 最新日韩在线 | 久久久亚洲一区 | 国产精品久久久久久久午夜片 | 国产二区视频 | 91精品一区二区三区久久久久 | 亚洲视频在线一区 | 亚洲精品不卡 | 成人精品久久 | 日韩综合在线 | 亚洲国产精品美女 | 一区二区不卡 | 国产精品久久av | 四虎精品在线 | 日韩国产中文字幕 | 日韩亚洲视频 | 一区视频在线免费观看 | 91视频国产精品 | 欧美成人影院在线 | 国产精品国产精品国产专区不卡 | 久久国产电影 | 日韩欧美高清dvd碟片 | 成人精品鲁一区一区二区 | 毛片一区二区三区 | 日本黄色不卡视频 | 日韩一区二区在线播放 | 国产一区二区欧美 | 特级黄一级播放 | 国产精品国产亚洲精品看不卡15 | 精久久久| 亚洲成人av在线播放 | 日韩精品一区二区三区中文在线 |