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 ...
随机推荐
- Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
Java: String typeStr = "1,2"; String[] typeArray = typeStr.split(","); typeStr = ...
- [转帖]Asp.Net MVC EF各版本区别
Asp.Net MVC EF各版本区别 https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 201 ...
- 使用 jstack 查询线程死锁错误日志 定位问题
定位问题 (1) 首先 找到相应的进程 使用 ps -ef | grep 'com.sankuai.qcs.regulation.dispatch' 找到进程的ID;==>21980 (2) t ...
- VMWare 安装 Eclipse
由于之前已经安装了 OpenJDK 所以 这次我们可以直接下载 eclipse来安装. Eclipse 下载:http://www.eclipse.org/downloads/?osType=li ...
- Java中的split函数拆分后变成null的问题
对于一些特殊的情况,split拆分后并没有保留全的元素 如下例子: String x ="a,,,,,,"; String []y = x.split(",") ...
- CentOS 显示历史执行过的命令以及用户历史命令缓存文件
1.history命令用于显示历史执行过的命令 执行 history命令能显示出当前用户在本地计算机中执行过的最近 1000 条命令记录. 如果觉得 1000 不够用,还可以自定义/etc/profi ...
- 关于Hive中常用函数需要注意的点小合集
1.COALESCE( value1,value2,... ) The COALESCE function returns the fist not NULL value from the list ...
- Android Studio中Git和GitHub使用详解
一.Git和GitHub简述 1.Git 分布式版本控制系统,最先使用于Linux社区,是一个开源免费的版本控制系统,功能类似于SVN和CVS.Git与其他版本管理工具最大的区别点和优点就是分布式: ...
- 21 Zabbix系统性能优化建议
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 21 Zabbix系统性能优化建议 1. Zabbix性能变慢的可能表现: zabbix队列有太多 ...
- 自学Linux Shell7.1-linux用户账户和组
点击返回 自学Linux命令行与Shell脚本之路 7.1-linux用户账户和组 linux安全系统的核心是用户账户.每个能进入linux系统的用户都会被分配唯一的用户账户,用户对系统中各对象的访问 ...