如何根据文件执行脚本

如何根据文件执行脚本

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

相关内容