Shell实现Key-Value式的哈希散列Map的使用

Shell里并没有内置hash类型,想要实现一种映射关系,可以用一个逼格比较高的玩意declare

具体实现方法

首先声明一下,我这里是声明一个虚拟机UUID到所在物理节点HOST的映射

declare -A UUID_TO_HOST_HASH

然后赋值,也就是填Key-Value对应关系;右边从nova show里取值可以不关注,右边相当于$host

for uuid in ${testi[......]

Read more

MAC更新Sed

Sed突然不好使了,一个普通的替换都报莫名其妙的错误

原因是MAC上默认安装的sed是基于freebsd的,与Linux下用习惯的GNU版本还是有些差异的

解决方法:

先通过brew安装gnu-sed

~ on  master! ⌚ 23:39:37
$ brew install gnu-sed
==> Downloading http://ftp[......]

Read more

SHELL被忽略的常识

往往被shell奇异的外表和不厌其烦的管道所吸引,拿起来就像直接解决某个问题或者实现某项功能,而一些基本内容容易被忽略

1:交互式程序

python的交互十分简易,命令行输入python就进入了交互模式,十分方便;一般shell要么命令行输入某个命令,要么直接写入到shell脚本文件当中执行,其实假如是测试小段代码,可以将shell脚本以交互的形式写入命令行

[lihui@localhost ~][……]

Read more

Shell里独特的if语句

今天在写分支的时候,一段代码硬是不执行,最后一点点测试才发现居然是if 0居然为真,没有想到会是这个问题,浪费很会时间

#!/bin/bash

if [ “$#” ];
then
    echo “yes”
else
    echo “no”
fi

大概意思就是,这个小例子当中本来是为了判断脚本执行是否携带参数,然后不同的处理,结果不管if里面[……]

Read more

实现BIN包的install以及自动化脚本

从checkout源代码开始,到最终做成一个BIN包,通过两个脚本完成,一个是要集成到BIN里的install.sh脚本(前面有说),关键就是中间写清楚build,install的过程,因为能够截取出源代码的,所以尽量不要放源代码然后编译,而是将二进制放里面,然后进行install,也就是中间最好不要build,而仅仅install,最后将压缩包以及解压的安装程序都删除掉;另一个脚本run_rel[……]

Read more

Linux下SHELL安装包必须注意的

上面那篇是今天打算用一种更好的方法模式来代替目前的RPM机制,但是成熟的RPM有很多种选项参数供你选择,比如是否包含源码包,是否去掉符号表,是否仅仅二进制,而今天做的SHELL脚本做的BIN包目前是携带源代码的,这对于一个需要release出去的软件来说应该是不合格的,

1:install.sh

Linux系统一切皆文件,所以这个脚本实际上是将自身的shell脚本命令和源代码的tar包给拼凑起来了[……]

Read more

Linux类似RPM的SHELL安装包的制作

在linux操作系统中,安装程序rhel系列有rpm,debian系列有deb,很多时候假如想要照顾所有linux系列,仅仅制作rpm是不够的,而且在制作rpm的时候,SPEC的编写是很多人觉得比较蛋疼的事情,所以能否提供一种linux都兼容的安装模式是有必要的,而bash是所有linux都存在的,所以最好的方法是提供一个类shell脚本来实现

其实很多大厂商的产品就是用这种模式,比如可以去VMw[……]

Read more