# 现在我们用字典结合数组来实现一个简单的远程管理机

远程管理机的需求:现在需要在一个管理机上实现下列两点内容:

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进阶篇之字典和数组结合应用案例的更多相关文章

  1. shell进阶篇之数组应用案例

    数组中可以存放多个值. Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小. 与大部分编程语言类似,数组元素的下标由0开始. Shell 数组用括号来表示,元素用"空格 ...

  2. linux shell 进阶篇、shell脚本编程-创建函数

    使用函数 #!/bin/bash # testing the script function myfun { echo "This is an example of a function&q ...

  3. JavaScript学习笔记 - 进阶篇(2)- 数组

    什么是数组 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦.我们用数组 ...

  4. PHP学习笔记 - 进阶篇(1)

    PHP学习笔记 - 进阶篇(1) 数组 数组定义 $arr = array();表示创建一个空数组,并把创建的空数组赋值给变量$arr. 索引数组初始化 PHP有两种数组:索引数组.关联数组. 索引和 ...

  5. 【转】Shell编程进阶篇(完结)

    [转]Shell编程进阶篇(完结) 1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最 ...

  6. shell日志分析进阶篇

    前面我们说了shell分析日志常用指令,现在我们随ytkah一起看看shell日志分析进阶篇,假设日志文件为ytkah.log //统计不重复抓取数量 cat ytkah.log | awk '{pr ...

  7. 函数形参为基类数组,实参为继承类数组,下存在的问题------c++程序设计原理与实践(进阶篇)

    示例: #include<iostream> using namespace std; class A { public: int a; int b; A(int aa=1, int bb ...

  8. 最快让你上手ReactiveCocoa之进阶篇

    前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...

  9. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

随机推荐

  1. RocketMQ系列(三)消息的生产与消费

    前面的章节,我们已经把RocketMQ的环境搭建起来了,是一个两主两从的异步集群.接下来,我们就看看怎么去使用RocketMQ,在使用之前,先要在NameServer中创建Topic,我们知道Rock ...

  2. el-table 表格加图片、加音频、加序号、多级动态表头

    elemnet-ui组件库大家应该不陌生,在展示多条结构类似的数据方面,el-table可谓扛把子,不仅可以把数据展示的整齐,还支持排序.筛选或其他自定义操作.那么,除了上述的基本功能外,你还遇到过哪 ...

  3. linux下解决vim打开文件乱码现象

    用VIM打开一个文件进行编辑时最下面的任务栏出现中文乱码,严重影响编写代码. 因为VIM默认的语言支持不行, 修改~/.vimrc 文件或/etc/vimrc 文件,添加一下代码: set encod ...

  4. 代码点(code point)和代码单元(code units)

    1. 解释一 char:Java中,char类型为16个二进制位,原本用于表示一个字符.但后来发现,16位已经不够表示所有的字符,所以后来发展出了代码点表示字符的方法. 代码点(code point) ...

  5. python中的类型

    python中的类型分为四种 1.整形 2.浮点型 3.字符串 4.对象(除了前三种,其他的都是对象) 比如函数也是对象 def fun(): print(123) type(fun) // < ...

  6. Visible Lattice Points(规律题)【数学规律】

    Visible Lattice Points 题目链接(点击) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9031   ...

  7. cb28a_c++_STL_算法_查找算法_(1)find_find_if

    cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...

  8. vc++,MFC,组合框控件设置时0xC0000005: 读取位置 0x00000020 时发生访问冲突

    511.exe 中的 0x78bb5dec (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 _AFXWIN_INLINE int ...

  9. selenium(9)- Xpath的详细使用

    什么是Xpath 官方:XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航 [XPath 使用路径表达式来选取 XML 文档中的节点或者节点集 ...

  10. linux 系统文件目录颜色及特殊权限对应的颜色

    什么决定文件目录的颜色和背景?  颜色  说明  栗子  权限 白色 表示普通文件   蓝色 表示目录  绿色 表示可执行文件 浅蓝色 链接文件 黄色 表示设备文件 红色   表示压缩文件 红色闪烁 ...