Сценарий оболочки для завершения цикла после завершения первого цикла

#bash #oracle #shell #sqlplus

#bash #Oracle #оболочка #sqlplus

Вопрос:

Код работает нормально до последнего цикла for . Он пытается войти в базу данных. Либо он устанавливает успешное соединение с базой данных, либо нет, скрипт выдает вывод OK / NOT OK в зависимости от соединения, а затем завершает работу сценария оболочки. Что я должен сделать, чтобы решить эту проблему?

 #!/bin/bash

read -p 'Username: ' var_username
read -sp 'Password: ' var_password

filename="$1"

while read -r line; do
name=$(sed 's/#.*$//g; s/(.*$//g; s/=.*$//g; s/).*$//g')
done < "$filename"

#retval=$? | tail -n1|grep OK

for tns in $name
do
tnsping $tns
if [ $? -eq 1 ]; then
echo $tns 'tnsping i calismiyor' >>tnslatest.log
else
echo $tns 'tnsping i calisiyor' >>tnslatest.log
working_tns =($tns)
fi
done


#The following lines do not work properly.#
for working in $working_tns
do
echo "exit" | sqlplus -L $var_username/$var_password@$working | grep             
Connected > /dev/null
if [ $? -eq 0 ] 
then
    echo "OK"
 else
    echo "NOT OK"
 fi
done
  

Например; мой файл tnsnames.ora содержит 4 tnn.
Итак, я хочу, чтобы для вывода в целом было ОК или НЕ ОК.

Заранее спасибо.

Комментарии:

1. Если вы хотите выполнить итерацию по массиву, который вам, вероятно, понадобится "${working_tns[@]}" в последнем цикле for

2. Этот первый while read цикл делает не то, что вы думаете. Я не уверен, что вы думаете, что он делает, но он делает что-то бессмысленное.

3. Вы пробовали shellcheck.net ?