标签:下标 批量 length rgb 需求 替换 bubuko 元素 tle
一、概念
shell数组就是一个元素集合,它把有限个元素用一个名字来命名,然后用编号对他们分区。这个名字称为数组名,用于区分不同内容的编号称为数组的下标。
二、shell数组的定义与增删改查
1.shell数组的定义
方法1:元素之间使用空格分隔,用小括号将元素括起来
语法:array=(value value1 value3 ...)
实例:
Linux:/qinys/data # array=(1 2 3)
Linux:/qinys/data # echo ${array[*]}
1 2 3
方法2:用小括号括起来,采用键值对赋值
语法:array=([key1]=value1 [key2]=value2 ...)
实例:
Linux:/qinys/data # array=([3]=‘A‘ [9]=‘B‘ [6]=‘C‘)
Linux:/qinys/data # echo ${array[3]}
A
Linux:/qinys/data # echo ${array[6]}
C
Linux:/qinys/data # echo ${array[9]}
B
Linux:/qinys/data # echo ${array[*]}
A C B
方法3:通过定义数组变量的方法来定义(此方法太复杂,不推荐使用)
实例:
Linux:/qinys/data # arr1[0]=a
Linux:/qinys/data # arr1[1]=b
Linux:/qinys/data # arr1[2]=c
Linux:/qinys/data # echo ${arr1[1]}
b
方法4:动态定义数组,使用命令输出结果作为数组的内容
语法:array=($(命令))或者array=(`命令`)
实例:
Linux:/qinys/data # ll
total 8
-rw-r--r-- 1 root root 11 Jan 11 02:23 a.txt
-rw-r--r-- 1 root root 12 Jan 11 02:30 b.txt
Linux:/qinys/data # arr2=($(ls /qinys/data/))
Linux:/qinys/data # echo ${arr2[*]}
a.txt b.txt
2.shell数组的打印及输出
(1)打印所有数组元素
使用*或者@可以打印所有的素组元素
Linux:/qinys/data # arr3=(2 3 4)
Linux:/qinys/data # echo ${arr3[*]}
2 3 4
Linux:/qinys/data # echo ${arr3[@]}
2 3 4
(2)打印指定数组元素
Linux:/qinys/data # echo ${arr3[1]}
3
(3)打印数组长度
Linux:/qinys/data # echo ${#arr3[*]}
3
Linux:/qinys/data # echo ${#arr3[@]}
3
3.数组的新增
实例:
Linux:/qinys/data # arr3[4]=5
Linux:/qinys/data # echo ${arr3[@]}
2 3 4 5
“数组名[下标]”对数组进行引用赋值,如果存在,则覆盖,不存在则新增
4.数组的删除
使用命令unset删除
实例:
Linux:/qinys/data # unset arr3[1]
Linux:/qinys/data # echo ${arr3[@]}
2 4 5
默认情况下,数组下标元素从0开始
删除整个数组
unset arr3
Linux:/qinys/data # array_tmp=(1 2 3 4 5 6)
Linux:/qinys/data # echo ${array_tmp[@]:1:3} #<--截取1号到3号的元素
2 3 4
Linux:/qinys/data # array_tmp=($(echo {a..z})) #<--将元素赋值给数组
Linux:/qinys/data # echo ${array_tmp[@]}
a b c d e f g h i j k l m n o p q r s t u v w x y z
Linux:/qinys/data # echo ${array_tmp[@]/a/1000} #<--将元素a替换为1000
1000 b c d e f g h i j k l m n o p q r s t u v w x y z
三、shell数组脚本案例
1.循环打印数组元素
#!/bin/bash array=(1 2 3) for((i=0;i<${#array[@]};i++)) do echo ${array[i]} done
输出结果:
2.通过普通for循环语句打印数组元素
#!/bin/bash array=(1 2 3) for i in ${array[@]} do echo $i done
输出结果:
3.通过while循环打印数组
#!/bin/bash array=(1 2 3) i=0 while((i<${#array[@]})) do echo ${array[i]} ((i++)) done
输出结果与上述相同
4.竖向定义数组并批量打印
#!/bin/bash arr_ip=( 192.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 192.168.1.5) #循环打印数组 for((i=0;i<${#arr_ip[@]};i++)) do echo "The num is $i,the ip is ${arr_ip[i]}" done echo "---------------------" echo "ayy_ip length is :${#arr_ip[@]}"
输出结果:
四、现实案例
需求:利用bash打印出下面这句话中大于等于5个字母的单词
my favourite subject is English . and i like sports very much
方法一:
#!/bin/bash arr=(my favourite subject is English . and i like sports very much) for((i=0;i<${#arr[@]};i++)) do if [ ${#arr[i]} -gt 5 ] then echo "${arr[i]}" fi done echo ‘----------------------‘ for word in ${arr[*]} do if [ `expr length $word` -gt 5 ]; then echo $word fi done
输出结果:
方法2:使用awk打印
Linux:/qinys/data # chr="my favourite subject is English . and i like sports very much"
Linux:/qinys/data # echo $chr|awk ‘{for(i=0;i<=NF;i++) if(length($i)>5) print $i}‘
my favourite subject is English . and i like sports very much
favourite
subject
English
sports
标签:下标 批量 length rgb 需求 替换 bubuko 元素 tle
原文地址:https://www.cnblogs.com/OliverQin/p/10256648.html