您的当前位置:首页正文

Linux命令详解(十)Shell脚本的数组详解

2022-09-09 来源:客趣旅游网
Linux命令详解(⼗)Shell脚本的数组详解

1、数组定义

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

⼀对括号表⽰是数组,数组元素⽤“空格”符号分割开。2、数组读取与赋值1)得到长度:

[root@bastion-IDC ~]# echo ${#a[@]}8

[root@bastion-IDC ~]# echo ${#a[*]}8

⽤${#数组名[@或*]} 可以得到数组长度2)读取:

[root@bastion-IDC ~]# echo ${a[4]}5

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

⽤${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容3)赋值:

[root@bastion-IDC ~]# a[1]=100[root@bastion-IDC ~]# echo ${a[*]} 1 100 3 4 5 6 7 8

[root@bastion-IDC ~]# a[5]=140[root@bastion-IDC ~]# echo ${a[*]} 1 100 3 4 5 140 7 8

直接通过 数组名[下标] 就可以对其进⾏引⽤赋值,如果下标不存在,⾃动添加新⼀个数组元素4)删除:

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

[root@bastion-IDC ~]# echo ${#a[*]}7

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。3、特殊使⽤1)分⽚:

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

[root@bastion-IDC ~]# echo ${a[@]:1:4}2 3 4 5

[root@bastion-IDC ~]# c=(${a[@]:1:4})[root@bastion-IDC ~]# echo ${#c[@]}4

[root@bastion-IDC ~]# echo ${c[*]} 2 3 4 5

直接通过 ${数组名[@或*]:起始位置:长度} 切⽚原先数组,返回是字符串,中间⽤“空格”分开,因此如果加上”()”,将得到切⽚数组,上⾯例⼦:c 就是⼀个新数据。2)替换:

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

[root@bastion-IDC ~]# echo ${a[@]}1 2 3 4 5 6 7 8

[root@bastion-IDC ~]# a=(${a[@]/3/100})

[root@bastion-IDC ~]# echo ${a[@]}1 2 100 4 5 6 7 8

调⽤⽅法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上⾯例⼦,重新定义数据。4、截取⾃⼰需要的数组元素

#!/bin/bashSERVER=$1

echo '------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 ;;

#------------------------------------------------------------------------------------ # 反向代理Proxy

#------------------------------------------------------------------------------------ ###################################################################################### #\"${SERVERS[3]}\") 获取数组的最后⼀个元素为直播节点CDN \"${PROXY_SERVER}\") sleep 1 ;; *)

log debug \"------------------ CURRENT IP-------------------\"${SERVER} for i in ${SERVERS[@]} do

echo \"--\"$i done ;;esac

因篇幅问题不能全部显示,请点此查看更多更全内容