Shell工具jsondiff.sh怎么用

今天就跟大家聊聊有關(guān)Shell工具jsondiff.sh怎么用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)建站推出正寧免費(fèi)做網(wǎng)站回饋大家。

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

邏輯很簡(jiǎn)單,無(wú)非就是通過(guò)curl在不同的服務(wù)器上取得結(jié)果集,然后diff即可,不過(guò)這里有幾點(diǎn)需要注意的地方:首先,JSON就一行,直接diff會(huì)失去意義;其次,JSON中漢字會(huì)被編碼,不利于查看;另外,JSON中字段順序是無(wú)所謂的,所以diff前***排序。說(shuō)明一下,在格式化JSON數(shù)據(jù)的時(shí)候,我沒(méi)有用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」的用法值得注意一下,相關(guān)參考資料如下:

Getopt in Bash Bash: Preserving Whitespace Using set and eval

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

看完上述內(nèi)容,你們對(duì)Shell工具jsondiff.sh怎么用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享名稱:Shell工具jsondiff.sh怎么用
瀏覽路徑:http://bm7419.com/article2/jdcjic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序關(guān)鍵詞優(yōu)化、App開發(fā)響應(yīng)式網(wǎng)站、外貿(mào)建站、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)