Como executar um script baseado em um arquivo

0

Estou tentando escrever um script que se conectará ao Oracle a partir de um servidor de salto (ou seja, executarei meu script de um servidor de salto. No meu script, terei um arquivo de configuração como abaixo

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB        ODB123       ODB1        
CDC        CDC123       CDC1        

Então, agora eu vou passar o arquivo de configuração em um loop e vou executar

${ORACLE_HOME}/bin/sqlplus -S ${USER}/${PASSWORD}@${TNSNAMES} 

Então, executando a consulta acima pela primeira vez em um loop. Ele deve tentar fazer login no servidor usando o nome de usuário e a senha acima e deve gravar no arquivo config como PASS se a conexão foi bem-sucedida e FAIL se a conexão falhar.

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB         ODB123      ODB1        PASS
CDC         CDC123      CDC1        FAIL

E, novamente, ele deve ler o arquivo config atualizado e, se for PASS, ele deverá entrar no banco de dados e fazer os respectivos sqls que chamarmos. E deve ignorar o banco de dados se FAIL .

Eu tentei o script abaixo que gravará o conteúdo em outro arquivo.

#!/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"

Eu tentei escrever o mesmo conteúdo em um novo arquivo e o script acima funcionou.

Qualquer ideia de como escrever no arquivo original, como PASSA / FALHA. Arquivo original é como mencionado abaixo.

#USERNAME   PASSWORD    TNSNAMES    SUCCESS/FAIL
ODB        ODB123       ODB1        
CDC        CDC123       CDC1        
    
por sabarish jackson 16.03.2017 / 05:31

1 resposta

0

Então, é apenas sobre a edição no lugar. Eu prefiro sed -i para isso:

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

Então, para o dado $line eu removo qualquer PASS ou FAIL com sua guia e substituo pelo $result . Espero que funcione para você.

    
por 16.03.2017 / 11:17