摘要:
1、array=(value1 value2 ...... valueN)
#赋值
2、read -a array
#读入数组
3、${array[@]}
${!array[@]}
${#array[@]}
${array[@]:n:m}
#数组信息,数组下标,数组长度,去数组位置
4、# array=($(ls | grep rpm))
#命令执行结果放入数组
5、for i in ${a[@]} ; do
#遍历数组
6、set| grep array
#利用set查看数组赋值情况
1、数组的声明、赋值和查看
read赋值举例
# read -a array
#-a表示从标准输入读入数组,遇到换行为止
1 2 3 4 5
1 2 3 4 5
# echo "${array[@]}"
1 2 3 4 5
1 2 3 4 5
查看举例
# echo ${array[0]}
red hat
# echo "${array[0]}"
red
# echo "${array[@]}"
red
# echo ${array[@]}
red hat fedora
# set | grep array
array=([0]="red
2、数组常用的变量
# array=('red
hat' 'fedora')
#赋值,第一个元素中有多个空格
# echo ${array[@]}
red hat fedora
#打印数组,第一个元素的空格变成一个了
red hat fedora
# echo "${array[@]}"
red
hat fedora
#加引号保持原貌
red
# echo ${#array[@]}
2
#数组长度
# echo ${!array[@]}
0 1
#数组下标
2
# echo ${!array[@]}
0 1
# echo ${array[@]:1:1}
fedora
#获取数组元素
fedora
3、数组的常用操作
(1)命令执行结果放入数组
bind-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-devel-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-sdb-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm
# array=(`ls | grep rpm`)
# echo ${array[@]}
bind-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-devel-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-sdb-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm
(2)读入字符串,给数组赋值
i=0
n=5
while [ "$i" -lt $n ] ; do #遍历5个输入
echo "Please input strings ... `expr $i + 1`"
read array[$i] #数组赋值
b=${array[$i]}
echo "$b"
i=`expr $i + 1` #i递增
done
n=5
while [ "$i" -lt $n ] ; do
done
(3)字符串的字母逐个放入数组,并输出
chars='abcdefghijklmnopqrstuvwx yz'
i=0
while [ "$i" -lt ${#chars} ] ; do #
${#char}是字符串长度
done
(4)判断一个变量是否在数组中
一个很简洁的写法是:
echo ${array[@]} | grep -wq "${member}"
if [ $? -eq $SUCCESS ];then
但是这会带来一个问题,如果array的元素里面带有空格,就会误认为是一个元素,因此遍历比较是更稳妥的选择。
for i in ${array[@]};do
done
(5)构建二维数组
a=('1 2 3' '4 5 6' '7 8 9')
#赋值,每个元素中都有空格
for i in ${a[@]} ; do
done
(6)文件内容读入数组
# cat /etc/shells | tr "\n" " " >/tmp/tmp.file
#回车变空格
# read -a array < /tmp/tmp.file
#读入数组
# set| grep array
array=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/dash")
array=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/dash")