shell数组

目录

1.shell数组的定义及分类

   1.数组的定义   

   2.数组的分类

2.数组的定义方式

  1.定义方式

  2.数组格式


1.shell数组的定义及分类

   1.数组的定义   

    (1)数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)。

    (2)数组元素的下标由0开始

    (3)Shell数组用括号来表示,元素用“空格”符号分割开

    (4)在shell语句中,使用遍历数组的时候,数组格式要写成 ${arr[@]}  或  $ {arr[*]}  。

数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用哦!

   2.数组的分类

    (1)普通数组:不需要声明直接定义,下标索引只能是整数;
    (2)关联数组:需要用declare -A 声明否则系统不识别,索引可以是字符串。


 

2.数组的定义方式

  1.定义方式

   (1) 直接把要加入数组的元素用小括号括起来,中间用空格分开。

nu=(22 33 44 55)

   

   (2)精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续

num=([0]=77 [1]=55 [2]=33 [3]=99)

     (3)先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组。

lisi="11 22 33 44"
num=($lisi)

   (4)可以把命令的结果用小括号括起来添加到数组,那么数组会以空格或者制表符区分每一个元素。

num=(`cat /etc/passwd`)
[root@localhost ~]# echo ${#num[*]}
111
[root@localhost ~]# echo ${num[0]}
root:x:0:0:root:/root:/bin/bash
注意以下特殊方式:
[root@localhost ~]# list[0]=1    //没有定义数组之前也可这样直接定义元素
[root@localhost ~]# 
[root@localhost ~]# echo ${list[*]}
1

[root@localhost ~]# list=([0]=1 [1]=2 [3]=4)    //定义数组时所以可以是不连续的
[root@localhost ~]# echo ${list[*]}
1 2 4
[root@localhost ~]# echo ${!list[*]}       //没有2这个索引,数组元素为3
0 1 3


[root@localhost ~]# ff=(1 2 zhangsan lisi)    //不是同一数据类型的也可定义为一个数组
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# echo ${ff[*]}
1 2 zhangsan lisi

2.数组格式

如:arr=(11 22 33 44)
数组名称:arr
数组元素:11,12,12,14,数组元素默认是以空格分隔的
数组长度:4,有4个元素
数组下标:每个数组元素都有一个下标索引,一般从0开始,33是数组第三个元素,但是它的下标索引是2

1.数组的常用操作以及经典案例

(1)读取数组和元素

[root@localhost ~]# fruit=(apple banana orange)   //定义了一个水果的数组
[root@localhost ~]# echo ${#fruit[*]}       //查看这个数组元素的个数,也是数组长度
3
[root@localhost ~]# echo ${!fruit[*]}         //查看这个数组元素的索引
0 1 2
[root@localhost ~]# echo ${fruit[*]}          //查看这个数组的元素
apple banana orange
[root@localhost ~]# echo ${fruit[@]}        //查看这个数组的元素
apple banana orange
[root@localhost ~]# echo ${fruit[0]}         //查看这个数组索引为0的元素
apple

[root@localhost ~]# declare -a | grep fruit      //查看声明的所有变量可以看到数组
declare -a fruit='([0]="apple" [1]="banana" [2]="orange")'

 

(2)元素切片

[root@localhost ~]# arr=(1 2 3 4 5 6 7 8)
[root@localhost ~]# echo ${arr[*]:2:3}     //提取从索引2开始的3个元素
3 4 5
[root@localhost ~]# echo ${arr[*]:2:2}     //提取从2开始的2个元素
3 4
[root@localhost ~]# echo ${arr[*]:0:2}
1 2

(3)数组的遍历

#!/bin/bash
a=(1 2 3 4 5 6)
for i in ${a[@]}
do
   echo $i
done

(4)定义某一个元素

[root@localhost ~]# fruit[0]=pear
[root@localhost ~]#
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

(5)元素替换

定义或替换某一个元素
[root@localhost ~]# fruit[0]=pear
[root@localhost ~]#
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

[root@localhost ~]# echo ${fruit[*]/banana/ba}   //临时替换
pear ba orange
[root@localhost ~]# echo ${fruit[*]}
pear banana orange

(6)元素删除

[root@localhost ~]# unset fruit[0]
[root@localhost ~]#
[root@localhost ~]# declare -a | grep fruit
declare -a fruit=‘([1]=“banana” [2]=“orange”)’

(7)数组删除和指定下标的值删除

[root@localhost ~]# unset arr

(8)数组追加元素

   方法一:直接使用下标进行元素的追加

数组名[下标]=变量

[root@localhost ~]# a=(10 20 30 40)
[root@localhost ~]# echo ${a[*]}
10 20 30 40
[root@localhost ~]# a[4]=50
[root@localhost ~]# echo ${a[*]}
10 20 30 40 50
[root@localhost ~]# a[5]=60
[root@localhost ~]# echo ${a[*]}
10 20 30 40 50 60

方法二:将数组的长度作为下标进行追加元素 

数组名[${数组名[@]}]=变量名

方法三:使用+=进行追加

数组名+=(变量1 变量2 ...)

(9)查看所有数组—declare -a

2.获取数组下标对应的值

数组名=(元素0  元素1  元素2  ……)					定义数组
echo ${数组名[索引值]}							输出数组索引值对应的元素,索引值为从0开始

3.冒泡排序

每次对比,确定最后一位【所以我数组长度需要-1】
#!/bin/bash
array=(90 70 82 100 30 66) #定义数组
echo "old_array:${array[*]}" #1.代表排序前的数组

lt=${#array[*]} #数组长度
#定义比较轮数,比较轮数为数组长度-1,从1开始
for ((i=1;i<=$lt;i++))
#当下标为0时for ((i=0;i<$lt;i++))
do
   #确定比较元素的位置,比较相邻的两个元素,较大的数往后放,在比较次数谁比较轮数而减少
    for ((j=0;j<$lt-i;j++))
    do
        #定义第一个元素的值
       first=${array[$j]}
       #定义第二个元素的值
       k=$[$j+1]
       second=${array[$k]}
      #如果第一个元素比第二个元素大,就互换
      if [ $first -gt $second ];then
      #把第一个元素的值保存到临时变量中
       temp=$first
     #把第二个元素赋值给第一个元素
       array[$j]=$second
     #把临时变量赋值给第二个元素
       array[$k]=$temp
   fi
    done
done
echo "new_array:${array[*]}"

 

### 定义和操作 Shell 中的数组 #### 1. 定义数组Shell 脚本中,可以通过以下方式定义数组数组无需指定大小,可以直接赋值给变量[^1]。 ```bash var=(value1 value2 value3 ...) ``` 例如: ```bash numbers=(1 2 3 4 5) letters=('a' 'b' 'c') mixed=("string" 123 true) ``` #### 2. 访问数组元素 通过 `${array_name[index]}` 的形式访问数组中的单个元素。注意,索引从 `0` 开始。 示例: ```bash echo ${numbers[0]} # 输出:1 echo ${letters[2]} # 输出:c ``` 如果未加方括号,则默认返回数组的第一个元素[^3]。 ```bash echo ${numbers} # 输出:1 ``` #### 3. 遍历整个数组 使用 `${array_name[@]}` 或 `${array_name[*]}` 来获取数组的所有元素。两者的区别在于是否保留空格作为分隔符[^2]。 - 使用双引号 `"${array_name[@]}"` 时,每个元素会被视为独立的部分。 - 不带双引号的情况下,`${array_name[@]}` 和 `${array_name[*]}` 行为一致。 示例: ```bash for num in "${numbers[@]}"; do echo $num done ``` #### 4. 获取数组长度 可以使用 `${#array_name[@]}` 或 `${#array_name[*]}` 来获取数组的长度[^4]。 示例: ```bash len=${#numbers[@]} echo "Array length is: $len" ``` #### 5. 获取数组下标 利用 `${!array_name[@]}` 或 `${!array_name[*]}` 可以获得数组的有效索引列表。 示例: ```bash indices=(${!letters[@]}) echo "Indices are: ${indices[@]}" ``` #### 6. 数组切片 Shell 支持对数组进行切片操作,语法如下: ```bash ${array_name[@]:start:length} ``` 其中 `start` 是起始位置,`length` 是截取的数量。如果不提供 `length` 参数,默认提取到末尾。 示例: ```bash slice=("${numbers[@]:1:3}") echo "Sliced array: ${slice[@]}" ``` --- ### 总结 以上介绍了如何在 Shell 脚本中定义、访问以及操作数组的方法。这些功能可以帮助减少代码冗余并提高可维护性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值