1、数组定义

  1. [root@bastion-IDC ~]# a=( )
  2. [root@bastion-IDC ~]# echo $a

一对括号表示是数组,数组元素用“空格”符号分割开。

2、数组读取与赋值
1)得到长度

  1. [root@bastion-IDC ~]# echo ${#a[@]}
  2.  
  3. [root@bastion-IDC ~]# echo ${#a[*]}

用${#数组名[@或*]} 可以得到数组长度

2)读取:

  1. [root@bastion-IDC ~]# echo ${a[]}
  2.  
  3. [root@bastion-IDC ~]# echo ${a[*]}

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

3)赋值:

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

直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

4)删除:

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

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。

3、特殊使用
1)分片:

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

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

2)替换:

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

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

4、截取自己需要的数组元素

  1. #!/bin/bash
  2. SERVER=$
  3. echo '------starting----------'
  4. 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')
  5.  
  6. #for i in ${SERVERS[@]}
  7. #do
  8. # echo "--"$i
  9. #done
  10.  
  11. # []
  12. function log() {
  13. if [ $ == "info" ]; then
  14. echo -e "\033[32;40m$2\033[0m"
  15. elif [ $ == "error" ]; then
  16. echo -e "\033[31;40m$2\033[0m"
  17. elif [ $ == "debug" ]; then
  18. echo -e "\033[34;40m$2\033[0m"
  19. fi
  20. }
  21.  
  22. PUSH_SERVER=${SERVERS[]}
  23. PROXY_SERVER=${SERVERS[${#SERVERS[*]}-]}
  24. echo "PUSH_SERVER = "$PUSH_SERVER
  25. echo "PROXY_SERVER = "$PROXY_SERVER
  26.  
  27. #echo "获取数组的长度1 = "${#SERVERS[@]}
  28.  
  29. unset SERVERS[]
  30. unset SERVERS[${#SERVERS[@]}]
  31.  
  32. #echo "获取数组的长度2 = "${#SERVERS[@]}
  33.  
  34. echo '------------------------------before-------------------'
  35.  
  36. # condition install:
  37. case $SERVER in
  38. #------------------------------------------------------------------------------------
  39. # 推流分发录像服务器
  40. #------------------------------------------------------------------------------------
  41. # [] 推流
  42. ######################################################################################
  43. "${PUSH_SERVER}")
  44. sleep
  45. ;;
  46. #------------------------------------------------------------------------------------
  47. # 反向代理Proxy
  48. #------------------------------------------------------------------------------------
  49. ######################################################################################
  50. #"${SERVERS[3]}") 获取数组的最后一个元素为直播节点CDN
  51. "${PROXY_SERVER}")
  52. sleep
  53. ;;
  54. *)
  55. log debug "------------------ CURRENT IP-------------------"${SERVER}
  56. for i in ${SERVERS[@]}
  57. do
  58. echo "--"$i
  59. done
  60. ;;
  61. esac

Linux 命令详解(十)Shell脚本的数组详解的更多相关文章

  1. Linux学习Day6:编写Shell脚本

    Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...

  2. linux c程序中获取shell脚本输出的实现方法

    linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...

  3. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

  4. Linux自动安装JDK的shell脚本

    Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...

  5. “全栈2019”Java第二十九章:数组详解(中篇)

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. 《Linux命令、编辑器与shell编程》第三版 学习笔记---002

    <Linux命令.编辑器与shell编程>第三版 学习笔记---001 Linux命令.编辑器与shell编程 Shell准备 1.识别Shell类型 echo  $0 echo $BAS ...

  7. linux C程序中获取shell脚本输出(如获取system命令输出)

    转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...

  8. Shell脚本之sed详解

    在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 一.什么是sed? sed 是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除 ...

  9. linux批量修改文件名的shell脚本

    linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令  ========================  NAME ...

随机推荐

  1. [cnbeta]iPhone 2018年全球出货2.25亿部:中国区下滑两成

    iPhone 2018年全球出货2.25亿部:中国区下滑两成 2019年01月22日 20:12 501 次阅读 稿源:快科技 0 条评论   https://www.cnbeta.com/artic ...

  2. 测试 多线程 实现 callable 带返回值

    package threadTest; import java.util.ArrayList; import java.util.Date; import java.util.concurrent.C ...

  3. git 查看远程分支最后一次提交时间

    背景 因为工程创建时间很长了,项目又特别多,导致代码库中远程分支有100多.想要清理一下远程分支,但又不能盲目的删除,需要一定的参考信息. 可以通过代码最后提交时间来进行判断,但是100多个分支,一个 ...

  4. SQLSERVER安装

    sql server 2008 代理服务提供的凭据无效 sql server 2008 代理服务提供的凭据无效 在Windows Server 2008安装SQL Server 2008出现的问题: ...

  5. hive 远程管理

  6. 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)

    Jeremy Howard 在业界可谓大名鼎鼎.他是大数据竞赛平台 Kaggle 的前主席和首席科学家.他本人还是 Kaggle 的冠军选手.他是美国奇点大学(Singularity Universi ...

  7. Java之数组遍历

    package basic; //数组遍历方法 public class ForEach { public static void main(String[] args) { // 原始数组 Stri ...

  8. Windows 下vim的配置文件_vimrc

    set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ...

  9. JVM 内存区域 (运行时数据区域)

    JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...

  10. 自学Python6.3-内置模块(1)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...