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

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

1.需要可以实时查看现有项目运行状态

2.远程登陆任意一台机器

备注:现有的机器如下

# 备注:通过 shell的字典和数组,写一个shell脚本来实现一个远程管理机器

  1. #!/bin/bash
  2.  
  3. #必须先声明
  4. declare -A dic
  5.  
  6. dic=(
  7. [10.3.1.1]="10.3.1.1,22,deploy1_dir,deploy1_name"
  8. [10.3.1.2]="10.3.1.2,26,deploy2_dir,deploy2_name"
  9. )
  10.  
  11. # 获取字典所有的key
  12. DIC_KEY=$(echo ${!dic[@]})
  13.  
  14. # 将字典的key转换为数组
  15. DIC_ARRAY=(
  16. $DIC_KEY
  17. )
  18.  
  19. # 获取数组的总个数
  20. ARRAY_NUM=${#DIC_ARRAY[*]}

  21. # UPDATE_PROJECT函数用来打印所有可登录机器
  22. UPDATE_PROJECT(){
  23. UPDATE_PROJECT_ARRAY_NUM=`expr ${#DIC_ARRAY[@]} - `
  24. echo "项目IP 序列号 项目"
  25. for i in `seq ${UPDATE_PROJECT_ARRAY_NUM}`
  26. do
  27. DIC_KEY=`echo ${DIC_ARRAY[${i}]}`
  28. IP=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $1}'`
  29. PORT=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $2}'`
  30. DIR=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $3}'`
  31. NAME=` echo ${dic["$DIC_KEY"]}|awk -F[,] '{print $4}'`
  32. echo "$IP $i $DIR"
  33. done
  34. }

  35. # ssh_login函数用来控制ssh远程登陆
  36. ssh_login(){
  37. ECHO_MSG='可以ssh远程登陆的项目'
  38. READ_MSG='输入要ssh远程登陆的序列号'
  39. while true
  40. do
  41. clear
  42. echo -e "\033[1;32m↓↓↓↓↓↓↓↓↓↓ ${ECHO_MSG}↓↓↓↓↓↓↓↓↓↓ \033[0m"
  43. UPDATE_PROJECT
  44. read -p "$READ_MSG: " NUM
  45. if [ "$NUM" = ];then
  46. echo -e ""
  47. MENU
  48. elif [[ "$NUM" =~ ^[-]+$ ]] && [ "$NUM" -le ${ARRAY_NUM} ];then
  49. ssh -p $PORT root@${DIC_ARRAY[${NUM}]}
  50. else
  51. echo -e "输入0-${ARRAY_NUM}的数字\n"
  52. fi
  53. done
  54. }
  55. # 最后执行ssh_login函数来执行这个脚本
  56. 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. 如何安装 Sublime text 编辑器相关的插件

    Sublime是一个伟大的编辑器,具有可靠的基础功能,使编写代码变得愉快.您可以安装一个包管理器,以便于安装插件和添加新功能. 为什么使用包管理器(package manager) 包管理器可以方便地 ...

  2. grafana repeat 特性

    1.设置变量 成功后会自动复制变量值个数的的画图板 类似下图 设置后是不能与预览结果的,需要保存后 切换到其他dashboard 再切换回来就可以看见了 官方文档repeat说明

  3. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. 这一次搞懂SpringMVC原理

    @ 目录 前言 正文 请求入口 组件初始化 调用Controller 参数.返回值解析 总结 前言 前面几篇文章,学习了Spring IOC.Bean实例化过程.AOP.事务的源码和设计思想,了解了S ...

  5. JavaSE的基本语法

    JavaSE基本语法 一.语法的注意事项 1.严格区分大小写 2.每句命令结尾使用分号 3.符号都是英文状态 4.括号.引号都是成对出现的! 5.注意缩进 Tips: 文件名和类名可以不一致,但pub ...

  6. GitHub如何回滚代码?

    1.git log 查看commit hash值 执行git log:查看commit hash值. 2.执行git reset --hard xxxx xxxx表示的是commit hash 值. ...

  7. MFC_VC++_时间获取与保存列表控件内容到文件操作方法

    MFC_VC++_时间获取与保存列表控件内容到excel文件操作方法 void CDataView::OnBnClickedBtnExporttoexcel() { CTime time = CTim ...

  8. c++. Run-Time Check Failure #2 - Stack around the variable 'cc' was corrupted.

    Run-Time Check Failure #2 - Stack around the variable 'cc' was corrupted. char cc[1024];   //此处如果索引值 ...

  9. .Net Core Configuration Etcd数据源

    前言     .Net Core为我们提供了一套强大的Configuration配置系统,使用简单扩展性强.通过这套配置系统我们可以将Json.Xml.Ini等数据源加载到程序中,也可以自己扩展其他形 ...

  10. 登录CentOS用户很慢/usr/bin/xauth: timeout in locking authority file /home/***/.Xauthority

    当使用非root用户登录CentOS时,发现很慢,而且弹出以下信息: /usr/bin/xauth:  timeout in locking authority file /home/***/.Xau ...