【发布时间】:2019-05-11 05:17:25
【问题描述】:
我编写了一个用于连接 DB2 数据库的 shell 脚本。此脚本列出 DB2 服务器上的数据库,并在用户输入所需的数据库名称后连接到数据库。但是在脚本以成功的数据库连接信息运行后,当我尝试对数据库运行命令时,它说数据库连接不存在。 SQLSTATE=08003
#!/bin/bash
#
#DBA DB2 Script: DB connection script-connectdb
#Created By : Ashish Verma
#Creation Date : 04/27/2019
#
#Purpose: This script connects to and activates the database
#printf "Below is the list of databases"
DBLIST=`db2 list db directory | grep -i alias | awk '{print $4}'`#This stores all the available databases in DBLIST
USER=`whoami`
echo "Following are the list of available database(s)"
echo "----------------------------------------------"
for db in $DBLIST; do
echo $db#Present the user will all available databases to choose and input
done
printf "\nEnter the name of the database you wish to connect to: "
read CHOICE#User enters tha db name
DB=`db2 "connect to $CHOICE user $USER"`##connection to database is made and output stored in variable DB
if [ -z "$(echo $DB | awk '{print $18}')" ]; then
printf "Database connection failed! Please check the below error: "#Prints if database is not connected to
printf "\n$DB\n"
else
printf "\nYou are connected to database $DB\n"#Prints successful connection
fi
#End of Script
运行上述脚本后,数据库连接成功,并打印“您已连接到数据库 $DB”行。任何从 shell 对数据库运行的命令都应该成功。 例如:db2 列出表空间; 但即使在上述脚本中成功建立数据库连接后,当我尝试对数据库运行命令时,它表示数据库连接不存在,我必须从“db2 connect to database db_name”命令中触发shell 来操作数据库。有人可以帮我,为什么即使在成功运行上述脚本后我还需要触发连接数据库命令?
【问题讨论】:
-
您能否再解释一下 - 特别是为什么您认为连接应该持续存在? shell脚本中的错误发生在哪里? FWIW,行 DBLIST=
db2 ...将执行 db2 命令。 db2 将做任何事情(例如生成列表)并终止。为什么?因为如果它没有终止,设置 DBLIST 的管道将永远不会结束。只要 db2 命令运行,它就会保持打开的标准输出,其余的都无法完成。现在,如果 db2 终止,它必须为 DBLIST(或 DB= 等)终止,那么连接不太可能保持打开状态。 -
您看到的行为是“按设计工作”,因为一旦您的脚本退出,来自 bash 的连接就会自动关闭。
-
@mao 你能建议在这种情况下可以做什么吗?如何创建一个在退出时不关闭来自 bash 的连接的脚本?