天天看點

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