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


输出:








~         

猜你喜欢

转载自blog.csdn.net/graceyongqi/article/details/79415443