shell数组

        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 文件名“再通过”.文件名“执行。

        觉得好的就给花花一个小赞叭~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值