我是Oracle DBA,我正在做一些脚本来检查我们的大量服务器上是否存在数据库。
我正在尝试将值设置为ssh -X中的变量,例如
[oracle@proddb02]$ DB_STAT=`ssh -X proaddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'`
[oracle@proddb02]$ echo $DB_STAT
ora_pmon_pconn01
上面的例子工作得很好但是因为我使用ssh命令我不能循环使用,因为它退出包含服务器列表的第一行文件。 所以我必须在命令中添加/ dev / null,以便它不应该退出循环。但是这不会设置变量值。 当我回应变量时,它什么都没有。
[oracle@proddb02]$ DB_STAT=`ssh -X proddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'</dev/null`
[oracle@proddb02]$ echo $DB_STAT
[oracle@proddb02]$ echo $DB_STAT
循环代码是
[oracle@proddb02]$cat test.sh
while read line
do
INST_VAR=`echo $line | awk '{ print $1 }'`
HOST_VAR=`echo $line | awk '{ print $2 }'`
SERVER_NAME=$HOST_VAR
INSTANCE_NAME=$INST_VAR
DB_STAT=`ssh -X proaddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'`
echo $DB_STAT
done < host_list.lst
非常感谢任何帮助。
答案 0 :(得分:0)
只是做:
DB_STAT=`ssh -X proaddb01 "ps -ef | awk '/[p]mon/'{ print $8 }"`
在这里使用:
//
过滤输入流(如grep但是awj awk); [p]grep
从ps中排除相同行的技巧(因为[p]grep
模板找不到[p]grep
字符串。)