在变量中捕获Ingres createdb命令

时间:2014-08-18 13:08:00

标签: bash shell scripting ingres

不太确定如何执行此操作但我需要从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

2 个答案:

答案 0 :(得分:0)

不太确定你要做什么。您是否尝试从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寻找引号来重新添加它们,这很痛苦但可行(也许其他人有聪明的方法去做)。

HTH

答案 1 :(得分:0)

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