编写巡检工具中一些shell基本技巧(持续更新)
来源:互联网 发布:财务报销流程软件 编辑:程序博客网 时间:2024/06/05 16:45
1.egrep用法
egrep常用语将打印结果中多个匹配项进行去除筛选,例如正常打印iostat结果
将打印结果的空格、百分号、以及第一行内容过滤掉,可以如下命令
iostat |egrep -v '%|Linux|^$'
其中^$是用于过滤空格
2.用root用户截取oracle打印结果
这里可以灵活运用EOF和su -c
例如查看asm_disk一些信息
su grid -c "/usr/bin/sh" <<-EOF
export ORACLE_SID=+ASM2
export ORACLE_HOME=/app/grid/product/122
echo "
set linesize 1000;
col path for a30;
col failgroup for a10;
select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,FAILGROUP,PATH from v\\\$asm_disk order by GROUP_NUMBER;"|/app/grid/product/122/bin/sqlplus -S '/ as sysasm'
EOF
这样好处可以在EOF内部将打印出来的结果进行过滤筛选,
su grid -c "/usr/bin/sh" <<-EOF
export ORACLE_SID=$asm_sid
export ORACLE_HOME=$ORACLE_HOME
echo "
set linesize 1000;
col path for a30;
col failgroup for a10;
select GROUP_NUMBER,DISK_NUMBER,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE,FAILGROUP,PATH from v\\\$asm_disk order by GROUP_NUMBER;"|/app/grid/product/122/bin/sqlplus -S '/ as sysasm'|egrep -v '^$|--|GROUP_NUMBER|rows'|awk '{print "STATIC,,"\$1",",\$2",",\$3",",\$4",",\$5",",\$6",",\$7",",\$8}'
EOF
这样可以将之前的打印结果在EOF内部修改,达到你需要的输出结果的目的
3.如果查询多个oracle结果,可以将很多信息以参数的形式,赋值到一个变量中
para_value=$(su $ORACLE_ADMIN -c "/usr/bin/sh" <<-EOF
export ORACLE_HOME=${ORACLE_HOME}
export ORACLE_SID=${oracle_sid}
export ORACLE_BASE=${ORACLE_BASE}
#Check active sessions/total session $1/$2
echo "select count(*) from v\\\$session;"| ${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba'|tail -n 2 | head -n 1;
echo "select count(*) from v\\\$session where USERNAME is not null and STATUS='ACTIVE' group by status;"| ${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba'|tail -n 2 | head -n 1;
#Check SGA,PGA,UNDO in used (Unit:MB) $3/$4/$5
echo "select TRUNC((sum(BYTES/1024/1024)),0) from V\\\$SGASTAT;"| ${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba'|tail -n 2 | head -n 1;
echo "select TRUNC(VALUE/1024/1024,0) from V\\\$PGASTAT where NAME='total PGA inuse';"|${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba'|tail -n 2 | head -n 1;
echo "select TRUNC((sum(BYTES/1024/1024)),0) from dba_segments where tablespace_name= (select \
upper(value) from v\\\$parameter where name = 'undo_tablespace');"| ${ORACLE_HOME}/bin/sqlplus -S '/ as sysdba'|tail -n 2 | head -n 1;
EOF
如上,我们将active sessions、total sessions、SGA、PGA等待赋值到para_vaule中,然后在通过para_vaule中的$1 $2...$n来一次性输出多个需要的结果
比如
total_sess=`echo $para_value | awk '{print \$1}'`;
active_sess=`echo $para_value | awk '{print \$2}'`;
#Calc SGA,PGA,UNDO in used (Unit:MB)
sga_inused=`echo $para_value | awk '{print \$3}'`;
pga_inused=`echo $para_value | awk '{print \$4}'`;
undo_inused=`echo $para_value | awk '{print \$5}'`;
4.利用for循环查询多个结果,比如df-h中所有的文件系统
for dd in `df -m | grep -v 'Mounted on' | awk '{print $1}'|grep '/'`
do
lv_length=0;
lv_length=`echo $dd|awk '{print length($1)}'`
if [ $lv_length -le 20 ];then
fs_total=`df -m $dd | tail -n 1 | awk '{print $2}'`
fs_used=`df -m $dd | tail -n 1 | awk '{print $5}'`
else
fs_total=`df -m $dd | tail -n 1 | awk '{print $1}'`
fs_used=`df -m $dd | tail -n 1 | awk '{print $4}'`
fi;
mount_point=`df -m $dd | tail -n 1 |awk '{print $NF}'`
echo 'STATIC,,'$dd,$fs_total,$fs_used,$mount_point;
done;
- 编写巡检工具中一些shell基本技巧(持续更新)
- shell脚本编写一些基础但容易忘记的小技巧(持续更新)
- shell 基本用法---持续更新中
- vs编译的一些技巧(持续更新中)
- java编程中的一些技巧(持续更新中)
- linux shell编写(持续更新)
- linux shell 操作技巧 (持续更新)
- 一些技巧&套路&注意事项 (持续更新)
- Linux的一些基本技巧(不断收集,更新中)
- Jenkins Plugin 编写过程中遇到的一些坑(持续更新中)
- 位运算的一些技巧,持续更新中
- myeclipse中编写小java项目遇到的一些问题(持续更新)
- 关于实际开发中优化web的一些小技巧汇总(持续更新中)
- linux使用技巧(持续更新中)
- 编程小技巧(持续更新中)
- word技巧积累(持续更新中)
- OpenCv里的一些基本函数,持续更新中。。。。。
- OpenCv里的一些基本函数,持续更新中。。。。。
- HDU-1213-How Many Tables [并查集]
- python安装xlrd库ide中提示未找到库
- 暑期学习记录04
- Teradata数据库使用笔记(1)--Teradata安装
- OSDService是否共享osdmap
- 编写巡检工具中一些shell基本技巧(持续更新)
- hdoj2008_数值统计
- 属性中可以包含对象
- TP框架CURD
- 为什么“懂了那么多道理却依然过不好这一生”?
- Hdoj2009求数列的和
- 最全的ORACLE-SQL笔记(转,出处不详)
- nyoj 111 分数加减法
- eclipse maven Tomcat 编译成功 运行,classnotfound