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 ...
随机推荐
- Eclipse Creating a New Runnable JAR File 清理工作空间下的配置文件
D:\workspacegit\.metadata\.plugins\org.eclipse.debug.core\.launches 相关文件存在这里.
- 临时关闭Mysql ONLY_FULL_GROUP_BY
/** * @author lcc807@ikoo8.com * * 临时关闭Mysql ONLY_FULL_GROUP_BY */ function closeSqlFullMode(){ DB:: ...
- hive数据类型
- apache自带压力测试工具ab的使用及解析
当你搭建了apache服务器并在上面部署了web网站,在网站运行前,为了使apache服务器的性能得到更好的应用,我们可以先对其进行压力测试.进行压力测试其实非常简单,我们也不用再额外下载安装什么测试 ...
- sort和uniq的应用实例
sort 排序 uniq 1.语法:sort [option]... [file]... 2.选项:-k key,关键子,指定以那个列来排序.如果不指定,默认将正行作为关键字排序-n 对数值排序.默认 ...
- python之pygal:掷两个不同的骰子并统计大小出现次数
代码示例: # 掷两个不同的骰子并统计大小出现次数 import pygal from die_class import Die die = Die(6) # 实例化一个六面的骰子对象 die_10 ...
- lvs逻辑卷详解
管理磁盘空间对系统管理员来说是一件重要的日常工作.一旦磁盘空间耗尽就需要进行一系列耗时而又复杂的任务,以提升磁盘分区中可用的磁盘空间.它也需要系统离线才能处理.通常这种任务会涉及到安装一个新的硬盘.引 ...
- 【比赛】NOIP2018 总结
一.考试过程 Day1: 先看了一遍题目,得到的结论是没有题是直接秒掉的,然后一道一道认真看. 看T1的时候开始并没想起来有一道原题,只是脑海中有一个印象,好像求差分和可以.然后自测了一下小样例,发现 ...
- Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己 ...
- A1036. Boys vs Girls
This time you are asked to tell the difference between the lowest grade of all the male students and ...