[root@aliyun ~]# unset array[0][root@aliyun ~]# echo ${array[*]}18 male IT
[root@aliyun ~]# declare -a |grep array
declare -a array='([1]="18" [2]="male" [3]="IT")'[root@aliyun ~]# [root@aliyun ~]# [root@aliyun ~]# unset array[2][root@aliyun ~]# declare -a |grep array
declare -a array='([1]="18" [3]="IT")'[root@aliyun ~]# unset array # 删除整个数组[root@aliyun ~]# echo ${array[*]}[root@aliyun ~]#
5、数组内元素的截取
[root@aliyun ~]# array=(egon 18 male IT 1.80)[root@aliyun ~]# echo ${array[*]:1} # 从索引1开始,一直到最后18 male IT 1.80[root@aliyun ~]# echo ${array[*]:1:3} # 从索引1开始,访问3个元素18 male IT
[root@aliyun ~]# array=(one two three four five fire)[root@aliyun ~]# echo ${array[*]#one}
two three four five fire
[root@aliyun ~]# echo ${array[*]#f*e}
one two three four
6、数组内容的替换
[root@aliyun ~]# array=(one two three four five fire)[root@aliyun ~]# echo ${array[*]/five/abc}
one two three four abc fire
[root@aliyun ~]# echo ${array[*]/f*e/abc}
one two three four abc abc
三、关联数组
1、数组分为两种:
普通数组:只能使用整数作为数组索引,我们前面介绍的都是普通数组
关联数组:可以使用字符串作为数组索引,需要用declare -A声明
2、声明关联数组
[root@aliyun ~]# declare -A info[root@aliyun ~]# info["name"]="egon"[root@aliyun ~]# info["age"]=18[root@aliyun ~]# info["gender"]="male"[root@aliyun ~]# [root@aliyun ~]# declare -A |grep info
declare -A info='([gender]="male" [name]="egon" [age]="18" )'[root@aliyun ~]# [root@aliyun ~]# echo ${info[*]}
male egon 18[root@aliyun ~]# [root@aliyun ~]# echo ${info["name"]}
egon
四、遍历数组
方法1:
利用获取所有信息进行遍历 (适用于普通数组与关联数组)
# 例1
declare -A array
array=(["name"]="egon"["age"]=18["gender"]="male")for item in ${array[*]}
do
echo $item
done
# 例2
array=("egon"18"male")for item in ${array[*]}
do
echo $item
done
方法2:
通过数组元数的索引进行遍历(适用于普通数组与关联数组)
# 例1
declare -A array
array=(["name"]="egon"["age"]=18["gender"]="male")for i in ${!array[*]}# echo ${!array[*]} # 获取的是key信息:name age gender
do
echo "$i:${array[$i]}"
done
# 例2
array=("egon"18"male")for i in ${!array[*]}# echo ${!array[*]} 直接获取所有元素的索引信息
do
echo $i
echo ${array[i]}
done
方法3:
根据数组长度信息进行遍历,(适用于普通数组)
array=("egon"18"male")for((i=0;i<${#array[*]};i++))
do
echo "$i:${array[$i]}"
done
五、练习
练习1:
对指定的IP地址进行网络测试
#!/bin/bash
array=(10.0.0.710.0.0.810.0.0.910.0.0.41)for info in ${array[*]}
do
ping -c 2-W 1 $info
done
练习2:
统计登录shell的种类及对应的个数(关联数组)#!/bin/bash
declare -A array_for_shell
while read line # done后面接<将文件重定向给while;while后再接read将文件流赋值给变量
do
login_shell=`echo $line | cut -d:-f7`
let array_for_shell["$login_shell"]++# 当使用let时,变量前面不必加上$
done </etc/passwd
for k in ${!array_for_shell[*]}
do
echo $k:${array_for_shell[$k]}
done
练习3:
获取文件指定列的信息
[root@egon test]# cat a.sh #!/usr/bin/env bash
declare -A array
while read line
do
let array[`echo $line | cut -d:-f7`]++
done </etc/passwd
for k in ${!array[*]}
do
echo $k:${array[$k]}
done
[root@egon test]# [root@egon test]# ./a.sh /sbin/nologin:41/bin/sync:1/bin/bash:2/sbin/shutdown:1/sbin/halt:1