数组是相同数据类型的元素按一定顺序排列的集合,把有限个类型相同的变量用一个名字命名,然后用编号区分他们变量的集合,这个名称称之为数组名,编号成为下标。Linux Shell编程中常用一维数组。

数组的设计其实了为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式,以减少重复频繁的单独定义。

定义数组一般以小括号的方式来定义,数组的值可以随机指定,如下为一维数组的定义、统计、引用和删除操作:

(1) 一唯数组定义及创建:

YUTEST=( 
test1
test2
test3 
)
LAMP=(httpd  php  php-devel php-mysql mysql mysql-server)

(2)数组下标一般从0开始,如下为引用数组的方法:

echo        ${YUTEST[0]}            引用第一个数组变量,结果打印test1;
echo    ${YUTEST[1]}            引用第二个数组变量;
echo    ${YUTEST[@]}        显示该数组所有参数;
echo    ${#YUTEST[@]}       显示该数组参数个数;
echo    ${#YUTEST[0]}       显示test1字符长度;
echo    ${YUTEST[@]:0}      打印数组所有的值;
echo    ${YUTEST[@]:1}      打印从第二个值开始的所有值;
echo    ${YUTEST[@]:0:2}    打印从第一个值与第二个值;
echo    ${YUTEST[@]:1:2}    打印从第二个值与第三个值。

(3) 数组替换操作:

YUTEST=( [0]=www1 [1]=www2 [2]=www3 )          数组赋值;
echo  ${YUTEST[@]/test/yuedu}                  将数组值test替换为yuedu;
NEWYUTEST=`echo  ${YUTEST[@]/test/yuedu}`      将结果赋值新数组。

(4) 数组删除操作:

unset array[0]                  删除数组第一个值;
unset array[1]                  删除数组第二个值;
unset array                     删除整个数组。

(5) 数组Shell脚本企业案例一,网卡bond绑定脚本:

#!/bin/bash
#Auto Make KVM Virtualization
#Auto config bond scripts
#By author yuedu.net 2017
eth_bond()
{
NETWORK=(
  HWADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $1}'`
  IPADDR=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $2}'`
  NETMASK=`ifconfig eth0 |egrep "HWaddr|Bcast" |tr "\n" " "|awk '{print $5,$7,$NF}'|sed -e 's/addr://g' -e 's/Mask://g'|awk '{print $3}'`
  GATEWAY=`route -n|grep "UG"|awk '{print $2}'`
)
cat >ifcfg-bond0<<EOF
DEVICE=bond0
BOOTPROTO=static
${NETWORK[1]}
${NETWORK[2]}
${NETWORK[3]}
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
EOF

(6) 数组Shell脚本企业案例二,定义IPv4值:

#!/bin/bash
#auto Change ip netmask gateway scripts  
#By author yuedu.net 2017
ETHCONF=/etc/sysconfig/network-scripts/ifcfg-eth0
HOSTS=/etc/hosts
NETWORK=/etc/sysconfig/network
DIR=/data/backup/`date +%Y%m%d`
NETMASK=255.255.255.0
echo "----------------------------"
count_ip(){
        count=(`echo  $IPADDR|awk  -F.  '{print $1,$2,$3,$4}'`)
        IP1=${count[0]}
        IP2=${count[1]}
        IP3=${count[2]}
        IP4=${count[3]}
}