shell中数据类型不多,比如说字符串、数字类型、数组。数组是比较重要的一种,其主要操作有求数组长度、元素长度、遍历其元素、元素切片、替换、删除等操作。
和C语言不同,shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小,且数组元素的下标由0开始。
数组声明
declare -a array_name #声明数组
declare -a nums=(1 2 3 4) #声明数组并赋初值
unset array_name #删除数组
unset nums[0] #删除数组中的某个元素
数组定义
array_name=(value1 ... value n)
注意:1、数组中的元素,必须以空格分开
2、字符串可以通过($str)转成数组,操作起来很方便
接下来看一个简单的脚本:
#!/bin/bash
names=(jerry tom alice)
for((i=0;i<${#names[*]};i++)){
echo ${names[$i]} #输出该数组的元素
}
echo "********"
str="You are my faith"
names=($str) #把字符串转化为数组
for i in ${names[@]} #${names[@]}和${names[*]}都是显示数组全部元素
do
echo $i
done
输出结果为:
jerry
tom
alice
********
You
are
my
faith
获取数组的长度
#!/bin/bash
users=(huahua bibi leilei lucky)
#方式一:
${#users[@]}
#方式二:
${#users[*]}
#求数组元素的长度
#方式一:
${#users[0]}
#方式二:
expr length ${users[0]}
#方式三:
echo ${users[0]} | wc -L
#方式四:
echo ${users[0]} | awk '{print length($0)}'
运行结果为:
4
4
6
6
6
6
数组赋值
users[1]="xinli" #修改第二个元素的值,上面我们定义过users数组
数组添加
users[4]="cat" #添加第五个元素
还有一种添加新元素的方法:
old=(1 2 3 4)
new=(${old} 5)
数组切片
脚本为:
#!/bin/bash
array=(one two three four five)
echo $array #默认取第一个元素
echo ${array[0]} #取下标为0的元素
echo ${array[@]} #取全部元素
echo ${array[@]:1} #从索引为1到后面所有元素的值
echo ${array[@]:0:3} #从索引为0开始取三位(0可省略)
echo ${array[@]:(-2):2} #从倒数第二个取两位
new_array={${array[@]}:1:4} #得到一个新的切片数组
运行结果为:
one
one
one two three four five
two three four five
one two three
four five
元素切片
跟数组切片很相似,我们再来看一个脚本:
跟数组切片很相似,我们再来看一个脚本:
#!/bin/bash
student=(tom jerry david alice)
echo ${student[0]:0} #取下标为0的元素的索引为0往后全部
echo ${student[1]:2:2} #取下标为1的元素从索引为1往后全部
echo ${student[0]:6} #若超出元素长度则显示空行
运行结果为:
tom
rr
数组替换
用法:
${array[@]/x/y} #最小匹配替换,每个元素只替换一次
${array[@]//x/y} #最大匹配替换,每个元素替换多次
${array[@]/x/} #最小匹配删除,只删除一个符合条件的元素
${array[@]//x/} #最大匹配删除,可删除多个符合条件的元素
${array[@]/#x/y} #从左往右匹配替换,只替换每个元素最左边的字符
${array[@]/%x/y} #从右往左匹配替换,只替换每个元素最右边的字符
例子:
#!/bin/bash
nums=(one two three four)
echo ${nums[@]/e/E}
echo ${nums[@]//e/E}
echo ${nums[@]/e/}
echo ${nums[@]//e/}
echo ${nums[@]/#t/T}
echo ${nums[@]/%o/O}
运行结果:
onE two thrEe four
onE two thrEE four
on two thre four
on two thr four
one Two Three four
one twO three four
数组删除
# 每个元素,从左向右进行最短匹配
## 每个元素,从左向右进行最长匹配
% 每个元素,从右向左进行最短匹配
%% 每个元素,从右向左进行最短匹配
例子:
#!/bin/bash
list=(look food)
echo ${list[@]#b*o} #bo匹配到,被删除
echo ${list[@]##b*o} #boo被配到,被删除
echo ${list[@]%o*d} #od匹配到,被删除
echo ${list[@]%%o*d} #ood匹配到,被删除
运行结果:
look food
look food
look fo
look f
以上运行脚本都是把脚本写到一个文件里,通过“bash 文件名”或者先给文件可执行权限“chmod +x 文件名“再通过”.文件名“执行。
觉得好的就给花花一个小赞叭~