(之前写过一篇类似的文章,当时传输文件用的是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. hadoop:could only be replicated to 0 nodes, instead of 1

    在Hadoop的环境搭建过程中,常常会遇到类似这样的错误信息提示:“could only be replicated to 0 nodes, instead of 1 ”,产生这样的错误原因有多种,这 ...

  2. Hibernate逍遥游记-第3章对象-关系映射基础-access="field"、dynamic-insert、dynamic-update、formula、update=false

    1. package mypack; import java.util.*; public class Monkey{ private Long id; private String firstnam ...

  3. Java Project和Web Project 区别

    java project是java工程,不包括JSP等前台页面的代码 大部分是CS结构的工程和一些jar包 web project是web工程,是BS结构的系统 web project部署到服务器上 ...

  4. QSS的作用需要正确设置文件编码才能起作用

    QT这个库,无非使用OO对跨平台做了绝佳的封装,这其中的主要工作也就是比较繁琐而已,但并不多么了不起.唯独其中提供的QSS功能,让我感到十分神奇,做出来的效果实在很惊艳,而使用代码却又是如此简单,而且 ...

  5. 编译器的未来——我们还需要C++么?

    在未来我们还需要纯C++开发模式么? 随着C++11的诞生,C++已经越来越臃肿,从03的时候就觉得C++实在是太复杂了.以一个合格C++程序员的标准来简单的来说3-5年略有小成,5-8年才可以说自己 ...

  6. 虚函数(virtual)为啥不能是static

    静态成员函数,可以不通过对象来调用,即没有隐藏的this指针. virtual函数一定要通过对象来调用,即有隐藏的this指针. static成员没有this指针是关键!static function ...

  7. vimrc示例

     1 "===============================================================================  2 "   ...

  8. RecyclerView(6)自定义RecyclerView.LayoutManager

    A LayoutManager is responsible for measuring and positioning item views within a RecyclerView as wel ...

  9. 将SQLServer2005中的数据同步到Oracle中

    有时由于项目开发的需要,必须将SQLServer2005中的某些表同步到Oracle数据库中,由其他其他系统来读取这些数据.不同数据库类型之间的数据同步我们可以使用链接服务器和SQLAgent来实现. ...

  10. [Codeforces676B]Pyramid of Glasses(递推,DP)

    题目链接:http://codeforces.com/problemset/problem/676/B 递推,dp(i, j)表示第i层第j个杯子,从第一层开始向下倒,和数塔一样的题.每个杯子1个时间 ...