파일을 기반으로 스크립트를 실행하는 방법

파일을 기반으로 스크립트를 실행하는 방법

점프 서버에서 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제거하고 이것이 도움이 되기를 바랍니다.PASSFAIL$result

관련 정보