Сценарий оболочки для подключения к базе данных DB2 не работает - PullRequest
0 голосов
/ 11 мая 2019

Я написал сценарий оболочки для подключения к базе данных DB2.Этот сценарий выводит список баз данных на сервере 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». Любая команда, которая запускается для базы данных из оболочки, должнабыть успешным. Например: список табличных пространств db2; но даже после успешного подключения к базе данных в приведенном выше сценарии, когда я пытаюсь выполнить команду для базы данных, она говорит, что подключение к базе данных не существует, и мне нужно запуститьКоманда «db2 connect to database db_name» из оболочки для манипулирования базой данных. Может кто-нибудь помочь мне, почему мне нужно запустить команду connect to database даже после успешного запуска вышеуказанного скрипта?

1 Ответ

0 голосов
/ 11 мая 2019

Я рекомендую установить соединение как команду непосредственно в вашем коде, а не как часть присвоения переменной, которая создает подоболочку.

db2 connect to $CHOISE user $USER

После этого просто проверьте код ошибкиа не сгенерированный вывод.

if [ $? -ne 0 ] ; then
  echo error
  exit 1
find

Если вам действительно нужно обработать вывод, перенаправьте вывод db2 в файл (даже временный файл) и обработайте вывод, прочитав файл (cat).

Никогда не передавайте вывод переменной через подоболочку, например db2 ... или $ (db2 ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...