0

不太确定如何执行此操作,但我需要从 createdb 获取输入,这是一个 Ingres 命令,并将其传递给包装脚本中的变量,然后写入日志文件。

#!/usr/bin/bash
#  createdb_wrapper.scr
#  Log information about user of createdb.scr


#Install=`echo $II_SYSTEM`
#Default_Dir=$Install/ingres/DBA
#Database=`echo ingprenv II_DATABASE`
Default_Dir=/export/home/cwatts/test
Default_Log=DB.Audit

while [ -z "${fname}" ]
do
    echo "Please, enter your Fullname [ENTER]:"
    read fname
done

dbname=`bash createDB.scr | awk '{printf $1}'`

while [ -z "${desc}" ]
do
    echo "Please,enter a brief Description [ENTER]:"
    read desc
done


#Checks the directory exists, and creates if not
if [ ! -d $Default_Dir ] ;then
    echo "directory doesn't exit, it will be created"
    mkdir $Default_Dir
fi

echo `date` '|' $dbname '|'  $fname '|'  $desc >> $Default_Dir/$Default_Log
exit
4

2 回答 2

0

不太确定您要做什么。您是否尝试从 createdb 命令获取数据库名称?如果是这样,您可以在脚本中提示它,然后自己将其传递给 createdb,例如:

read -p "Please enter a database name: " dbname
createdb ${dbname}

这有帮助吗?

更新:

我对 Ingres 很熟悉,已经使用了几十年左右;)所以你试图在 createdb 周围放置一个包装器。所以像我上面的东西会起作用。但是,这将使用默认选项创建数据库。如果您想将其他选项传递给 createdb,您还需要提示它们,但原理相同。

另一种方法是检查 createdb 的输出以获取数据库名称。该输出如下所示:

$ createdb pauldb
Creating database 'pauldb' . . .

  Creating DBMS System Catalogs . . .
  Modifying DBMS System Catalogs . . .
  Creating Standard Catalog Interface . . .
  Creating Front-end System Catalogs . . .

Creation of database 'pauldb' completed successfully.

因此,如果您只是使用 $* 将脚本的参数传递给 createdb,然后 grep 输出“已成功完成”,那么您可以从中获取 dbname,您的脚本将具有与 createdb 本身相同的所有选项。

第二种方法的唯一缺点是,如果您有任何引用的参数,那么您可能会丢失引号,例如

createdb.wrapper "-u$ingres" newdb

变成

createdb -u$ingres newdb

并且 $ 会导致问题,这就是您首先引用它的原因(尽管我自己倾向于键入 \$ingres)。

这对您来说可能不是问题。我编写了脚本,在其中解析了 args 以寻找引号以重新添加它们,这很痛苦但可行(也许其他人有一个聪明的方法来做到这一点)。

高温高压

于 2014-08-19T14:48:49.890 回答
0

createdb是一个表现得像任何好的程序的应用程序 - 当出现问题时,它会以非 0 的值退出。所以只需检查$?包含先前执行命令的退出状态的 BASH 变量,并测试它是否等于 0 (一切正常),或者不是(出了点问题)。

于 2014-08-23T15:00:59.813 回答