Linux腳本學習_字符串數組

2018.3.5更新:demo2添加使用awk的另一種方法

mark:

shell語言很方便的一點是,變量$x 外層套一個括號() 這個變量就直接變成數組了!

獲取數組長度  ${#arr[@]}

獲取數組元素   ${arr[i]}

shell中原始分隔符爲 空格,變量名爲IFS,很方便的一點是,可以臨時改掉分隔符,打到其他符號分割字符串的目的,記得最後改回 空格。

mark:shell 中 如果要匹配反斜槓\ (不把它當作轉義符而是普通字符)需要用單引號或者四個反斜槓,解釋如下

參考 https://blog.csdn.net/zhoulixin8/article/details/50112975


例子:

#!/bin/bash
a="hello,world,nice,to,meet,you"
OLD_IFS="$IFS"
IFS=","
arr=($a)
echo ${#arr[@]}
IFS="$OLD_IFS"


以下爲工作中的實例

demo1:獲取instance個數

#!/bin/bash
a="h.ello w-orld nice to meet you"
arr=($a)
i=${#arr[@]}

echo $i;


demo2:獲取json數據中指定字段並以規定格式輸出

a.txt:

{"result":[{"testName":"monkey","testAlias":"Android\u7a33\u5b9a\u6027","testTypeId":"3","cqcTaskId":"116259","re
portUrl":"http:\/\/域名\/?r=report&cqcTaskId=116259"},{"testName":"compatible","testAlias":"Android\u51
7c\u5bb9\u6027","testTypeId":"1","cqcTaskId":"116260","reportUrl":"http:\/\/域名\/?r=report&cqcTaskId=1

16260"}],"status":1}

腳本:

#!/bin/bash
file=$(cat a.txt)
var1=($(echo $file|grep -Po '"testName":".*?"'|sed 's/"testName":"//' | sed 's/.$//'))
var2=($(echo $file|grep -Po '"reportUrl":".*?"'|sed 's/"reportUrl":"//' | sed 's/.$//'))
#exec 3<"name.txt"
#exec 4<"url.txt"
#while read line1<&3 && read line2<&4
#do
#       echo $line1:$line2;
#done
#rm name.txt;
#rm url.txt;
num=${#var1[@]}
#echo $num ;
for((i=0;i<num;i++))
do
        echo ${var1[i]}:${var2[i]};

done

腳本2:

#!/bin/bash
file=$(cat a.txt)
#var1=(cat a.txt|grep -Po '"testName":".*?"'| awk -F '"' '{print $4}')
var1=($(cat a.txt|grep -Po '"testName":".*?"'| awk -F '"' '{print $4}'))
var2=($(cat a.txt|grep -Po '"reportUrl":".*?"'| awk -F '"' '{print $4}'))
num=${#var1[@]}
#echo $num ;
i=0;
for((i=0;i<num;i++))
do
        echo ${var1[i]}:${var2[i]};

done


輸出:








~         
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章