shell进阶篇之字典和数组结合应用案例
# 现在我们用字典结合数组来实现一个简单的远程管理机
远程管理机的需求:现在需要在一个管理机上实现下列两点内容:
1.需要可以实时查看现有项目运行状态
2.远程登陆任意一台机器
备注:现有的机器如下

# 备注:通过 shell的字典和数组,写一个shell脚本来实现一个远程管理机器
#!/bin/bash #必须先声明
declare -A dic dic=(
[10.3.1.1]="10.3.1.1,22,deploy1_dir,deploy1_name"
[10.3.1.2]="10.3.1.2,26,deploy2_dir,deploy2_name"
) # 获取字典所有的key
DIC_KEY=$(echo ${!dic[@]}) # 将字典的key转换为数组
DIC_ARRAY=(
$DIC_KEY
) # 获取数组的总个数
ARRAY_NUM=${#DIC_ARRAY[*]}
# UPDATE_PROJECT函数用来打印所有可登录机器
UPDATE_PROJECT(){
UPDATE_PROJECT_ARRAY_NUM=`expr ${#DIC_ARRAY[@]} - `
echo "项目IP 序列号 项目"
for i in `seq ${UPDATE_PROJECT_ARRAY_NUM}`
do
DIC_KEY=`echo ${DIC_ARRAY[${i}]}`
IP=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $1}'`
PORT=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $2}'`
DIR=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $3}'`
NAME=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $4}'`
echo "$IP $i $DIR"
done
}
# ssh_login函数用来控制ssh远程登陆
ssh_login(){
ECHO_MSG='可以ssh远程登陆的项目'
READ_MSG='输入要ssh远程登陆的序列号'
while true
do
clear
echo -e "\033[1;32m↓↓↓↓↓↓↓↓↓↓ ${ECHO_MSG}↓↓↓↓↓↓↓↓↓↓ \033[0m"
UPDATE_PROJECT
read -p "$READ_MSG: " NUM
if [ "$NUM" = ];then
echo -e ""
MENU
elif [[ "$NUM" =~ ^[-]+$ ]] && [ "$NUM" -le ${ARRAY_NUM} ];then
ssh -p $PORT root@${DIC_ARRAY[${NUM}]}
else
echo -e "输入0-${ARRAY_NUM}的数字\n"
fi
done
}
# 最后执行ssh_login函数来执行这个脚本
ssh_login
shell进阶篇之字典和数组结合应用案例的更多相关文章
- shell进阶篇之数组应用案例
数组中可以存放多个值. Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小. 与大部分编程语言类似,数组元素的下标由0开始. Shell 数组用括号来表示,元素用"空格 ...
- linux shell 进阶篇、shell脚本编程-创建函数
使用函数 #!/bin/bash # testing the script function myfun { echo "This is an example of a function&q ...
- JavaScript学习笔记 - 进阶篇(2)- 数组
什么是数组 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦.我们用数组 ...
- PHP学习笔记 - 进阶篇(1)
PHP学习笔记 - 进阶篇(1) 数组 数组定义 $arr = array();表示创建一个空数组,并把创建的空数组赋值给变量$arr. 索引数组初始化 PHP有两种数组:索引数组.关联数组. 索引和 ...
- 【转】Shell编程进阶篇(完结)
[转]Shell编程进阶篇(完结) 1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最 ...
- shell日志分析进阶篇
前面我们说了shell分析日志常用指令,现在我们随ytkah一起看看shell日志分析进阶篇,假设日志文件为ytkah.log //统计不重复抓取数量 cat ytkah.log | awk '{pr ...
- 函数形参为基类数组,实参为继承类数组,下存在的问题------c++程序设计原理与实践(进阶篇)
示例: #include<iostream> using namespace std; class A { public: int a; int b; A(int aa=1, int bb ...
- 最快让你上手ReactiveCocoa之进阶篇
前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...
- Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...
随机推荐
- RocketMQ系列(三)消息的生产与消费
前面的章节,我们已经把RocketMQ的环境搭建起来了,是一个两主两从的异步集群.接下来,我们就看看怎么去使用RocketMQ,在使用之前,先要在NameServer中创建Topic,我们知道Rock ...
- el-table 表格加图片、加音频、加序号、多级动态表头
elemnet-ui组件库大家应该不陌生,在展示多条结构类似的数据方面,el-table可谓扛把子,不仅可以把数据展示的整齐,还支持排序.筛选或其他自定义操作.那么,除了上述的基本功能外,你还遇到过哪 ...
- linux下解决vim打开文件乱码现象
用VIM打开一个文件进行编辑时最下面的任务栏出现中文乱码,严重影响编写代码. 因为VIM默认的语言支持不行, 修改~/.vimrc 文件或/etc/vimrc 文件,添加一下代码: set encod ...
- 代码点(code point)和代码单元(code units)
1. 解释一 char:Java中,char类型为16个二进制位,原本用于表示一个字符.但后来发现,16位已经不够表示所有的字符,所以后来发展出了代码点表示字符的方法. 代码点(code point) ...
- python中的类型
python中的类型分为四种 1.整形 2.浮点型 3.字符串 4.对象(除了前三种,其他的都是对象) 比如函数也是对象 def fun(): print(123) type(fun) // < ...
- Visible Lattice Points(规律题)【数学规律】
Visible Lattice Points 题目链接(点击) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9031 ...
- cb28a_c++_STL_算法_查找算法_(1)find_find_if
cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...
- vc++,MFC,组合框控件设置时0xC0000005: 读取位置 0x00000020 时发生访问冲突
511.exe 中的 0x78bb5dec (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 _AFXWIN_INLINE int ...
- selenium(9)- Xpath的详细使用
什么是Xpath 官方:XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航 [XPath 使用路径表达式来选取 XML 文档中的节点或者节点集 ...
- linux 系统文件目录颜色及特殊权限对应的颜色
什么决定文件目录的颜色和背景? 颜色 说明 栗子 权限 白色 表示普通文件 蓝色 表示目录 绿色 表示可执行文件 浅蓝色 链接文件 黄色 表示设备文件 红色 表示压缩文件 红色闪烁 ...