Linux 命令詳解(十)Shell指令碼的數組詳解

來源:互聯網
上載者:User

標籤:current   condition   deb   ==   err   數組名   自己   一個   shell指令碼   

1、數組定義

[[email protected] ~]# a=(1 2 3 4 5 6 7 8)[[email protected]-IDC ~]# echo $a

一對括弧表示是數組,數組元素用“空格”符號分割開。

2、數組讀取與賦值
1)得到長度

[[email protected] ~]# echo ${#a[@]}8[[email protected]-IDC ~]# echo ${#a[*]}8

用${#數組名[@或*]} 可以得到數組長度

2)讀取:

[[email protected] ~]# echo ${a[4]}5[[email protected]-IDC ~]# echo ${a[*]}1 2 3 4 5 6 7 8

用${數組名[下標]} 下標是從0開始 下標是:*或者@ 得到整個數組內容

3)賦值:

[[email protected] ~]# a[1]=100[[email protected]-IDC ~]# echo ${a[*]} 1 100 3 4 5 6 7 8[[email protected]-IDC ~]# a[5]=140[[email protected]-IDC ~]# echo ${a[*]} 1 100 3 4 5 140 7 8

直接通過 數組名[下標] 就可以對其進行引用賦值,如果下標不存在,自動添加新一個數組元素

4)刪除:

[[email protected] ~]# a=(1 2 3 4 5 6 7 8)[[email protected]-IDC ~]# unset a[[email protected]-IDC ~]# echo ${a[*]}[[email protected]-IDC ~]# a=(1 2 3 4 5 6 7 8)[[email protected]-IDC ~]# unset a[1][[email protected]-IDC ~]# echo ${a[*]}1 3 4 5 6 7 8[[email protected]-IDC ~]# echo ${#a[*]}7

直接通過:unset 數組[下標] 可以清除相應的元素,不帶下標,清除整個資料。

3、特殊使用
1)分區:

[[email protected] ~]# a=(1 2 3 4 5 6 7 8)[[email protected]-IDC ~]# echo ${a[@]:0:3}1 2 3[[email protected]-IDC ~]# echo ${a[@]:1:4}2 3 4 5[[email protected]-IDC ~]# c=(${a[@]:1:4})[[email protected]-IDC ~]# echo ${#c[@]}4[[email protected]-IDC ~]# echo ${c[*]} 2 3 4 5

直接通過 ${數組名[@或*]:起始位置:長度} 切片原先數組,返回是字串,中間用“空格”分開,因此如果加上”()”,將得到切片數組,上面例子:c 就是一個新資料。

2)替換:

[[email protected] ~]# a=(1 2 3 4 5 6 7 8)[[email protected]-IDC ~]# echo ${a[@]/3/100}1 2 100 4 5 6 7 8[[email protected]-IDC ~]# echo ${a[@]}1 2 3 4 5 6 7 8[[email protected]-IDC ~]# a=(${a[@]/3/100})[[email protected]-IDC ~]# echo ${a[@]}1 2 100 4 5 6 7 8

調用方法是:${數組名[@或*]/尋找字元/替換字元} 該操作不會改變原先數組內容,如果需要修改,可以看上面例子,重新定義資料。

4、截取自己需要的數組元素

#!/bin/bashSERVER=$1echo ‘------starting----------‘SERVERS=(‘192.168.1.10‘ ‘192.168.10.10‘ ‘192.168.10.11‘ ‘192.168.10.12‘ ‘192.168.10.13‘ ‘192.168.100.100‘)#for i in ${SERVERS[@]}#do#  echo "--"$i#done# [01]function log() {    if [ $1 == "info" ]; then        echo -e "\033[32;40m$2\033[0m"    elif [ $1 == "error" ]; then        echo -e "\033[31;40m$2\033[0m"    elif [ $1 == "debug" ]; then        echo -e "\033[34;40m$2\033[0m"    fi}PUSH_SERVER=${SERVERS[0]}PROXY_SERVER=${SERVERS[${#SERVERS[*]}-1]}echo "PUSH_SERVER = "$PUSH_SERVERecho "PROXY_SERVER = "$PROXY_SERVER#echo "擷取數組的長度1 = "${#SERVERS[@]}unset SERVERS[0]unset SERVERS[${#SERVERS[@]}]#echo "擷取數組的長度2 = "${#SERVERS[@]}echo ‘------------------------------before-------------------‘# condition install:case $SERVER in    #------------------------------------------------------------------------------------    # 推流分發錄影伺服器    #------------------------------------------------------------------------------------    # [1] 推流    ######################################################################################    "${PUSH_SERVER}")    sleep 1    ;;    #------------------------------------------------------------------------------------    # 反向 ProxyProxy    #------------------------------------------------------------------------------------    ######################################################################################    #"${SERVERS[3]}") 擷取數組的最後一個元素為直播節點CDN    "${PROXY_SERVER}")    sleep 1    ;;    *)    log debug "------------------ CURRENT IP-------------------"${SERVER}    for i in ${SERVERS[@]}    do      echo "--"$i    done    ;;esac

 

Linux 命令詳解(十)Shell指令碼的數組詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.