Linux 命令详解(十)Shell脚本的数组详解
1、数组定义
- [root@bastion-IDC ~]# a=( )
- [root@bastion-IDC ~]# echo $a
一对括号表示是数组,数组元素用“空格”符号分割开。
2、数组读取与赋值
1)得到长度:
- [root@bastion-IDC ~]# echo ${#a[@]}
- [root@bastion-IDC ~]# echo ${#a[*]}
用${#数组名[@或*]} 可以得到数组长度
2)读取:
- [root@bastion-IDC ~]# echo ${a[]}
- [root@bastion-IDC ~]# echo ${a[*]}
用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容
3)赋值:
- [root@bastion-IDC ~]# a[]=
- [root@bastion-IDC ~]# echo ${a[*]}
- [root@bastion-IDC ~]# a[]=
- [root@bastion-IDC ~]# echo ${a[*]}
直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
4)删除:
- [root@bastion-IDC ~]# a=( )
- [root@bastion-IDC ~]# unset a
- [root@bastion-IDC ~]# echo ${a[*]}
- [root@bastion-IDC ~]# a=( )
- [root@bastion-IDC ~]# unset a[]
- [root@bastion-IDC ~]# echo ${a[*]}
- [root@bastion-IDC ~]# echo ${#a[*]}
直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
3、特殊使用
1)分片:
- [root@bastion-IDC ~]# a=( )
- [root@bastion-IDC ~]# echo ${a[@]::}
- [root@bastion-IDC ~]# echo ${a[@]::}
- [root@bastion-IDC ~]# c=(${a[@]::})
- [root@bastion-IDC ~]# echo ${#c[@]}
- [root@bastion-IDC ~]# echo ${c[*]}
直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。
2)替换:
- [root@bastion-IDC ~]# a=( )
- [root@bastion-IDC ~]# echo ${a[@]//}
- [root@bastion-IDC ~]# echo ${a[@]}
- [root@bastion-IDC ~]# a=(${a[@]//})
- [root@bastion-IDC ~]# echo ${a[@]}
调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
4、截取自己需要的数组元素
- #!/bin/bash
- SERVER=$
- 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
- # []
- function log() {
- if [ $ == "info" ]; then
- echo -e "\033[32;40m$2\033[0m"
- elif [ $ == "error" ]; then
- echo -e "\033[31;40m$2\033[0m"
- elif [ $ == "debug" ]; then
- echo -e "\033[34;40m$2\033[0m"
- fi
- }
- PUSH_SERVER=${SERVERS[]}
- PROXY_SERVER=${SERVERS[${#SERVERS[*]}-]}
- echo "PUSH_SERVER = "$PUSH_SERVER
- echo "PROXY_SERVER = "$PROXY_SERVER
- #echo "获取数组的长度1 = "${#SERVERS[@]}
- unset SERVERS[]
- unset SERVERS[${#SERVERS[@]}]
- #echo "获取数组的长度2 = "${#SERVERS[@]}
- echo '------------------------------before-------------------'
- # condition install:
- case $SERVER in
- #------------------------------------------------------------------------------------
- # 推流分发录像服务器
- #------------------------------------------------------------------------------------
- # [] 推流
- ######################################################################################
- "${PUSH_SERVER}")
- sleep
- ;;
- #------------------------------------------------------------------------------------
- # 反向代理Proxy
- #------------------------------------------------------------------------------------
- ######################################################################################
- #"${SERVERS[3]}") 获取数组的最后一个元素为直播节点CDN
- "${PROXY_SERVER}")
- sleep
- ;;
- *)
- log debug "------------------ CURRENT IP-------------------"${SERVER}
- for i in ${SERVERS[@]}
- do
- echo "--"$i
- done
- ;;
- esac
Linux 命令详解(十)Shell脚本的数组详解的更多相关文章
- Linux学习Day6:编写Shell脚本
Shell脚本命令的工作方式有两种: 交互式(Interactive):用户每输入一条命令就立即执行. 批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多 ...
- linux c程序中获取shell脚本输出的实现方法
linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...
- linux 的基本操作(编写shell 脚本)
终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...
- Linux自动安装JDK的shell脚本
Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...
- “全栈2019”Java第二十九章:数组详解(中篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 《Linux命令、编辑器与shell编程》第三版 学习笔记---002
<Linux命令.编辑器与shell编程>第三版 学习笔记---001 Linux命令.编辑器与shell编程 Shell准备 1.识别Shell类型 echo $0 echo $BAS ...
- linux C程序中获取shell脚本输出(如获取system命令输出)
转载自 http://blog.csdn.net/hjxhjh/article/details/7909518 1. 前言 Unix 界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些 ...
- Shell脚本之sed详解
在编写shell脚本的过程中,我们经常需要使用sed流编辑器和awk对文本文件进行处理. 一.什么是sed? sed 是一种在线编辑器,它一次处理一行内容.sed是非交互式的编辑器.它不会修改文件,除 ...
- linux批量修改文件名的shell脚本
linux中批量修改文件名的shell脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下 使用 rename 命令 ======================== NAME ...
随机推荐
- [cnbeta]iPhone 2018年全球出货2.25亿部:中国区下滑两成
iPhone 2018年全球出货2.25亿部:中国区下滑两成 2019年01月22日 20:12 501 次阅读 稿源:快科技 0 条评论 https://www.cnbeta.com/artic ...
- 测试 多线程 实现 callable 带返回值
package threadTest; import java.util.ArrayList; import java.util.Date; import java.util.concurrent.C ...
- git 查看远程分支最后一次提交时间
背景 因为工程创建时间很长了,项目又特别多,导致代码库中远程分支有100多.想要清理一下远程分支,但又不能盲目的删除,需要一定的参考信息. 可以通过代码最后提交时间来进行判断,但是100多个分支,一个 ...
- SQLSERVER安装
sql server 2008 代理服务提供的凭据无效 sql server 2008 代理服务提供的凭据无效 在Windows Server 2008安装SQL Server 2008出现的问题: ...
- hive 远程管理
- 最实用的深度学习教程 Practical Deep Learning For Coders (Kaggle 冠军 Jeremy Howard 亲授)
Jeremy Howard 在业界可谓大名鼎鼎.他是大数据竞赛平台 Kaggle 的前主席和首席科学家.他本人还是 Kaggle 的冠军选手.他是美国奇点大学(Singularity Universi ...
- Java之数组遍历
package basic; //数组遍历方法 public class ForEach { public static void main(String[] args) { // 原始数组 Stri ...
- Windows 下vim的配置文件_vimrc
set nocompatible source $VIMRUNTIME/vimrc_example.vim source $VIMRUNTIME/mswin.vim behave mswin set ...
- JVM 内存区域 (运行时数据区域)
JVM 内存区域 (运行时数据区域) 链接:https://www.jianshu.com/p/ec479baf4d06 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内 ...
- 自学Python6.3-内置模块(1)
自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...