ジャンプサーバーからOracleに接続するためのスクリプトを作成しようとしています。つまり、ジャンプサーバーでスクリプトを実行し、スクリプトには以下の設定ファイルがあります。
#USERNAME PASSWORD TNSNAMES SUCCESS/FAIL
ODB ODB123 ODB1
CDC CDC123 CDC1
それでは、設定ファイルを繰り返し見てみましょう。
${ORACLE_HOME}/bin/sqlplus -S ${USER}/${PASSWORD}@${TNSNAMES}
したがって、ループで最初に上記のクエリを実行するだけです。上記のユーザー名とパスワードを使用してサーバーにログインし、ファイルに正常な接続と接続失敗を記録する必要がありconfig
ます。PASS
FAIL
#USERNAME PASSWORD TNSNAMES SUCCESS/FAIL
ODB ODB123 ODB1 PASS
CDC CDC123 CDC1 FAIL
更新されたファイルを再度読み取る必要がありconfig
ます。渡された場合は、データベースに移動して呼び出された対応するSQLを実行する必要があります。その場合は、データベースを無視する必要がありますFAIL
。
コンテンツを別のファイルに書き込む次のスクリプトを試しました。
#!/bin/sh
. ~/.ODBenv
cat test.txt | grep '^#' > test1.txt
cat test.txt | grep -v '^#' | awk 'NF'|while read i;do
#if [ -z "$i" ]
#then
#break;
#fi
user_name=`echo $i|awk {'print $1'}`
password=`echo $i|awk {'print $2'}`
TNS_NAME=`echo $i|awk {'print $3'}`
echo "exit" | ${ORACLE_HOME}/bin/sqlplus -S ${user_name}/${password}@${TNS_NAME} |grep -E 'ORA|SP2' > /dev/null
if [ $? -ne 0 ]
then
echo -e "${user_name}\t ${password}\t ${TNS_NAME}\t PASS">>test1.txt
else
echo -e "${user_name}\t ${password}\t ${TNS_NAME}\t FAIL">>test1.txt
fi
done
#done < test.txt|grep -v "^#" | awk "NF"
新しいファイルに同じ内容を書いてみましたが、上記のスクリプトが機能しました。
生ファイルに「合格/失敗」などを書き込む方法を学びます。元の文書は以下にあります。
#USERNAME PASSWORD TNSNAMES SUCCESS/FAIL
ODB ODB123 ODB1
CDC CDC123 CDC1
ベストアンサー1
だからぴったりの編集だ。私はsed -i
これを好む:
tail -n+2 test.txt|while read -r line ; do
user_name=`echo "$line"|cut -d\ -f 1`
password=`echo $line|cut -d\ -f 2`
TNS_NAME=`echo $line|cut -d\ -f 3`
echo "exit" | ${ORACLE_HOME}/bin/sqlplus -S ${user_name}/${password}@${TNS_NAME} |grep -E 'ORA|SP2' > /dev/null
if [ $? -ne 0 ]; then
result=PASS
else
result=FAIL
fi
sed -i -E "/$line/s/\t*FAIL|\t*PASS|$/$result/" test.txt
done
したがって、そのケースの末尾またはそのタブを$line
削除し、これが役に立つことを願っています。PASS
FAIL
$result