【问题标题】:Retrieve oracle sid from oratab file从 oratab 文件中检索 oracle sid
【发布时间】:2015-12-13 10:05:48
【问题描述】:

我正在创建这个 ksh shell 脚本来比较用户输入的两个数据库名称中的 Oracle 主目录。

我尝试使用来自各个线程的catsed,但不知何故无法将 oracle home 值放入变量中进行比较。

Oratab:
db1:/oracle/app/oracle/product/11.2.0.3:Y
db2:/oracle/app/oracle/product/11.2.0.3:N
#db3:/oracle/app/oracle/product/11.2.0.4:Y

Runtime:
./compare_db db1 db2

#!/bin/ksh
sid1=$1;
sid2=$2;
file=/etc/oratab


function compare  {

 home1= sed -n "s#${sid1}.*/\(.*\)${sid1}.*#\1#p" $file
 home2= sed -n "s#${sid2}.*/\(.*\)${sid2}.*#\1#p" $file

if $home1 = $home2; then
  echo "Success"
else
  echo "Failure"
fi
}

Output: (I don't want to include last part "N/Y" after the : (colon))
home1 = /oracle/app/oracle/product/11.2.0.3
home2 = /oracle/app/oracle/product/11.2.0.3
db1 = db2
success

显然以上不起作用,仅测试代码,有人评论以及缺少什么或如何以优雅的方式完成?

谢谢,

【问题讨论】:

    标签: shell sed oracle11g ksh


    【解决方案1】:

    awk 工作:

    awk -F: "/^${mysid}/{printf \"%s\n\",\$2}" /etc/oratab
    

    【讨论】:

      【解决方案2】:

      您可以通过这些程序组合优雅地做到这一点:

      home1=$(grep $sid1 $file | cut -d":" -f2) --> output /oracle/app/oracle/product/11.2.0.3
      home2=$(grep $sid2 $file | cut -d":" -f2) --> output /oracle/app/oracle/product/11.2.0.3
      

      grep --> 查找指定 SID 所在的行

      cut --> 剪切第二个字段(由-f2指定),字段用指定字符-d":"进行分隔

      【讨论】:

      • 谢谢 ivanzg 工作得非常好,看起来又短又简单。
      • 如果db2从注释(#)开始我们怎么能不列出呢
      • 你可以使用这个例如:home1=$(grep -v "#" $file | grep $sid1 $file | cut -d":" -f2)
      • 以上评论更正:home1=$(grep -v "#" $file | grep $sid1 | cut -d":" -f2)
      猜你喜欢
      • 2020-01-09
      • 2021-11-30
      • 2021-06-11
      • 1970-01-01
      • 2011-09-11
      • 2020-05-28
      • 2018-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多