我正在尝试编写一个从跳转服务器连接到 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
orFAIL
及其选项卡,并将其替换为$result
.希望对你有帮助。