Shell 数组编程
- 概述
- 定义数组一般以小括号的方式来定义,数组的值可以随机指定,如下为一维数组的定义、统计、引用和删除操作:
-
- (1) 一唯数组定义及创建:
- (2) 数组下标一般从 0 开始,如下为引用数组的方法:
- (3) 数组替换操作:
- (4) 数组删除操作:
- (5) 数组 Shell 脚本企业案例一,网卡 bond 绑定脚本:
- (6) 数组 Shell 脚本企业案例二,定义 IPv4 值:
概述
数组是相同数据类型的元素按一定顺序排列的集合,把有限个类型相同的变量用一个名字命名,然后用编号区分他们变量的集合,这个名称称之为数组名,编号成为下标。
Linux Shell 编程中常用一维数组。
数组的设计其实了为了处理方便,把具有相同类型的若干变量按有序的形式组织起
来的一种形式,以减少重复频繁的单独定义。如图 17-3 所示:

定义数组一般以小括号的方式来定义,数组的值可以随机指定,如下为一维数组的定义、统计、引用和删除操作:
(1) 一唯数组定义及创建:
JFTEST=(
test1
test2
test3
)
LAMP=(httpd php php-devel php-mysql mysql mysql-server)
(2) 数组下标一般从 0 开始,如下为引用数组的方法:
echo ${JFTEST[0]} 引用第一个数组变量,结果打印 test1;
echo ${JFTEST[1]} 引用第二个数组变量;
echo ${JFTEST[@]} 显示该数组所有参数;
echo ${#JFTEST[@]} 显示该数组参数个数;
echo ${#JFTEST[0]} 显示 test1 字符长度;
echo ${JFTEST[@]:0} 打印数组所有的值;
echo ${JFTEST[@]:1} 打印从第二个值开始的所有值;
echo ${JFTEST[@]:0:2} 打印从第一个值与第二个值;
echo ${JFTEST[@]:1:2} 打印从第二个值与第三个值。
(3) 数组替换操作:
JFTEST=( [0]=www1 [1]=www2 [2]=www3 ) 数组赋值;
echo ${JFTEST[@]/test/jfedu} 将数组值 test 替换为 jfedu;
NEWJFTEST=`echo ${JFTEST[@]/test/jfedu}` 将结果赋值新数组。
(4) 数组删除操作:
unset array[0] 删除数组第一个值;
unset array[1] 删除数组第二个值;
unset array 删除整个数组。
(5) 数组 Shell 脚本企业案例一,网卡 bond 绑定脚本:
#!/bin/bash
#Auto Make KVM Virtualization
#Auto config bond scripts
#By author jfedu.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 jfedu.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]}
}