天天看点

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

Shell 数组编程

  • 概述
  • 定义数组一般以小括号的方式来定义,数组的值可以随机指定,如下为一维数组的定义、统计、引用和删除操作:
    • (1) 一唯数组定义及创建:
    • (2) 数组下标一般从 0 开始,如下为引用数组的方法:
    • (3) 数组替换操作:
    • (4) 数组删除操作:
    • (5) 数组 Shell 脚本企业案例一,网卡 bond 绑定脚本:
    • (6) 数组 Shell 脚本企业案例二,定义 IPv4 值:

概述

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

Linux Shell 编程中常用一维数组。

数组的设计其实了为了处理方便,把具有相同类型的若干变量按有序的形式组织起

来的一种形式,以减少重复频繁的单独定义。如图 17-3 所示:

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

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

(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]}
}