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 ...
随机推荐
- 前端Javascript效果汇总
1.DOM原生动态加载js <script type="text/javascript"> function loadJs(){ //得到html的头部dom var ...
- (二)JPA实体类主键生成策略
在JPA中,配置实体类的主键的生成策略使用 @GeneratedValue @Id @Column(name = "id") @GeneratedValue(strategy = ...
- @luogu - P6109@ [Ynoi2009]rprmq
目录 @description@ @solution@ @accepted code@ @details@ @description@ 有一个 n×n 的矩阵 a,初始全是 0,有 m 次修改操作和 ...
- 简易的phpexcel导出柱状图
首先得把phpexcel扩展的源码拷贝到项目文件下 下面是代码 /** 引入最重要的PHPExcel类库的入口文件 */ require(STK_PATH.'/class/stk/PHPExc ...
- php配置文件
mysql的配置文件是 my.iniphp配置文件是 php.iniThinKPHP配置文件 config.phpApche配置文件 httpd-confThinkPHP的运行,开启调试模式配置为 a ...
- PHP丨PHP基础知识之条件语IF判断「理论篇」
if语句是指编程语言(包括c语言.C#.VB.java.php.汇编语言等)中用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一. if语句概述 if语句是指编程语言(包 ...
- PHP丨PHP基础知识之条件语SWITCH判断「理论篇」
Switch在一些计算机语言中是保留字,其作用大多情况下是进行判断选择.以PHP来说,switch(开关语句)常和case break default一起使用 典型结构 switch($control ...
- selenium(5)-解读强制等待,隐式等待,显式等待的区别
背景 为什么要设置元素等待 因为,目前大多数Web应用程序都是使用Ajax和Javascript开发的:每次加载一个网页,就会加载各种HTML标签.JS文件 但是,加载肯定有加载顺序,大型网站很难说一 ...
- Asp.Net Core入门之静态文件
静态文件(css,js,html等类型文件)通常位于 web根目录下,而ASP.Net Core框架默认内容根目录下的wwwroot文件夹为web根目录.这里简单解释下内容根目录:实际就是指包含可执行 ...
- Java垃圾回收机制(GC)
Java内存分配机制 这里所说的内存分配,主要指的是在堆上的分配,一般的,对象的内存分配都是在堆上进行,但现代技术也支持将对象拆成标量类型(标量类型即原子类型,表示单个值,可以是基本类型或String ...