(之前写过一篇类似的文章,当时传输文件用的是ftp,因为项目觉得ftp不够安全所以这次换成了scp,同时对脚本的一些地方也做了一些调整)

其实做这个东西还是因为项目的需求,需要获取某些机器(目前主要是linux,aix,unix)上的os和db的信息,如果没有db的话给出提示信息,因为机器比较多,也是为了重复利用,因此写了这么一个shell脚本,脚本中要用到的一些关键命令,再前面几篇文章中都有介绍:awk,sed,export,sort;以及查找机器的os和db信息的命令。下面是整个代码:

#!/bin/sh

#获取os的name
name=$(uname -s -n | awk '{print $2}') #获取os的ip
ip=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:' ) #获取os的系统类型
os=$(uname -s -n | awk '{print $1}' ) #查找db的inst的路径,后面通过执行该命令来列出db的所有instance
dbinstpath=$(find /opt -name db2ilist|grep 'inst'|sed -n '1,1p')
#dbid=$($dbinstpath|sed -n '1,1p')

#判断命令dbinstpath是否为空,如果为空说明该机器上没有db
if test -z "$dbinstpath"
then
comm="no db2ilist on target computer"
osdbinfo=$name","$ip","$os","null","null","null","$comm"\n"$osdbinfo
else
  #如果不为空则执行dbinstpath,列出所有的instance
dbinst=$($dbinstpath)
if test -z "$dbinst"
then
echo "there is no any db instance on that server, so can not retrieve db info" > getDBinfo.log >&
else
    #循环取出instance的信息
for i in $dbinst
do
cmp=$(su - $i|grep "Unable to change directory")
if test -z "$cmp"
then
dbver=$(su - $i -c db2level | grep 'DB2 v' | awk '{print $5}'| tr -d '"|,' )
dbname=$(su - $i -c db2 list db directory | grep 'Database name' | awk '{print $4}' )
comm="_"
else
comm="can not change to directory for db instance:"$i
dbver="null"
dbname="null"
fi
osdbinfo=$name","$ip","$os","$dbver","$dbname","$i","$comm"\n"$osdbinfo
done
fi
fi

#将取到的os和db下个instance信息写到csv文件
csvtitle='0os_name, 0os_ip, 0os, 0db_version, 0db_name, 0db_inst'
echo $csvtitle"\n"$osdbinfo > db2info.csv >&

#下面这段主要是上传/下载文件,使用export和scp,其中export用来自动进行和terminor交互,自动输入密码等
svr="9.83.21.137"
echo "expect1" > getDBinfo.log >&
expect <<!
echo "expect2" > getDBinfo.log >&
spawn scp -r xman@$svr:/db2info.csv /tmp/db2info.txt
echo "expect3" > getDBinfo.log >&
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" {send "1qaz2wsx\n"}
}
"*assword:"
{
send "1qaz2wsx\n"
}
}
echo "expect4" > getDBinfo.log >&
expect "100%"
expect eof
!

#这段是给取到的os,db信息进行排序,删除重复的记录
cd /tmp
chmod u+rwx db2info.txt
echo $osdbinfo>>db2info.txt >&
sort -u db2info.txt -o db2info.txt
sed '/^$/d' db2info.txt>db2info_.txt

#最后将整理好的数据上传到svr服务器,整个过程结束
expect <<!
spawn scp -r /tmp/db2info_.txt xman@$svr:/db2info.csv
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" {send "1qaz2wsx\n"}
}
"*assword:"
{
send "1qaz2wsx\n"
}
}
expect "100%"
expect eof
!

这个shell脚本可以直接在目标机器上执行的。这里有个小提示就是,使用scp在linux,unix,aix系统上时没有问题的,因为一般他们都支持ssh protocal, 但是如果要使用scp在linux和windows直接传输的话,需要在windows机器上安装工具如freesshd或者winsshd来让windows机支持ssh protocal,安装后进行一些简单的配置就可以了,具体配置步骤网上应该很多,这里就不赘述了。

Shell获取Aix/linux/unix机器上db2和os的信息并上传到指定服务器的更多相关文章

  1. shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)

    shell脚本兼容linux/unix与windows/cygwin的基础 :统一文本格式为:unix文本格式,即于LF为换行符(推荐方案) 在notepad上设置:编辑->档案格式转换-> ...

  2. windows linux—unix 跨平台通信集成控制系统----系统硬件信息获取

    控制集成系统需要了解系统的各项硬件信息,之前我们设计的时候,习惯使用c函数来搞,后来可能发现程序的移植性收到了一些影响,比如unix内核的一些c函数在linux下面是没有的: 比如 苹果达尔文内核的如 ...

  3. php获取远程图片模拟post,file上传到指定服务器

    1.获取远程图片 /** $path保存图片的地址 $url要获取的远程图片地址 **/ function getimg($path,$url){ $aext = explode('.', $url) ...

  4. 3.6.使用STC89C52控制MC20解析GPS的经纬度数据上传到指定服务器

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  5. [转]Linux/Unix系统镜像/备份/恢复 (dd 命令使用)

    ref: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=22561912&id=156879 开源系统默认安装了一个d ...

  6. day22_1-课前上节复习+os模块

    # ********************day22_1-课前上节复习+os模块 *******************# ********************day22_1-课前上节复习+os ...

  7. 今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类

    今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在W ...

  8. linux上安装shell编辑器与linux运维面试题

    分两个部分 一.安装B-shell解释器 安装cygwin  Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...

  9. Linux History安全问题【保存记录防止删除】+完善Linux/UNIX审计 将每个shell命令记入日志

    2011-09-27 22:11:51|  分类: rhel5_033|举报|字号 订阅       Linux利用PROMPT_COMMAND实现审计功能 这个系统审计,记录什么用户,在什么时间,做 ...

随机推荐

  1. Java并发包中常用类小结(二)

    6.ThredPoolExecutor ThredPoolExecutor是基于命令模式下的一个典型的线程池的实现,主要通过一些策略实现一个典型的线程池,目前已知的策略有ThreadPoolExecu ...

  2. 欧拉工程第67题:Maximum path sum II

    By starting at the top of the triangle below and moving to adjacent numbers on the row below, the ma ...

  3. stringUtils是apache下的Java jar补充包

    org.apache.commons.lang.StringUtils StringUtils中一共有130多个方法,并且都是static的, 所以我们可以这样调用StringUtils.xxx().

  4. C#基础精华08(反射,程序集)

    什么是程序集? 程序集是.net中的概念. .net中的dll与exe文件都是程序集.(exe与dll的区别?) 程序集(Assembly),可以看做是一堆相关类打一个包,相当于java中的jar包( ...

  5. 设计模式之工厂方法模式VS简单工厂方法模式

    名词解释: 简单工厂:这个实在是没什么解释的,就是一个工厂类,然后有一个方法,根据传递的参数可以通过switch(你也可以是if,或者是使用高端的反射 )来进行对象的创建. 工厂方法:定义一个用于创建 ...

  6. 修改 eclipse 文件编码格式

    如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码.然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简 ...

  7. SPOJ 1108 Card Trick 暴力模拟

    解释一下样例,因为我觉得这个题意表述的不是很清楚.以第二组样例为例. 牌序为:3 1 4 5 2 第一轮:把 3 放到末尾:1 4 5 2 3,最顶上的牌是1,把1拿走.剩余 4 5 2 3 第二轮: ...

  8. 内存泄露了么: Handlers & Inner Classes

    看到一篇关于handler和匿名类关于内存泄露的文章,觉得不错,充分发挥拿来主义,先放这儿看着! From:http://www.androiddesignpatterns.com/2013/01/i ...

  9. POJ 3468 A Simple Problem with Integers(树状数组)

    题目链接:http://poj.org/problem?id=3468 题意:给出一个数列,两种操作:(1)将区间[L,R]的数字统一加上某个值:(2)查询区间[L,R]的数字之和. 思路:数列A,那 ...

  10. ConcurrentDictionary<TKey, TValue>的AddOrUpdate方法

    https://msdn.microsoft.com/zh-cn/library/ee378665(v=vs.110).aspx 此方法有一共有2个,现在只讨论其中一个 public TValue A ...