2016-07-07 4 views
0

내 스크립트 중 하나에 아래 코드가 있습니다. 스크립트가 잘 작동하고 예상되는 출력을 생성하지만, 나는 아래의 오류가 매번 얻을 :쉘 스크립트에서 특정 줄 끝의 명령을 찾을 수 없습니다.

callHomeProperties.sh을 : 154 : 1 : 명령을 찾을 수 없습니다 callHomeProperties.sh을 : 라인 160 : 1 : 명령

를 찾을 수 없음
148 if [[ "$OS_VERSION_DB" = "$OS_VERSION_FILE" && "$DB_DETAILS_DB" = "$DB_DETAILS_FILE" && "$APP_SERVER_DB" = "$APP_SERVER_FILE" && "$AAOP_VERSION_DB" = "$AAOP_VERSION_FILE" && "$VMWARE_DB"   = "$VMWARE_FILE" ]]; then 
149  echo "same entry for the customer updating the time stamp and the data date" 
150  `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL 
151  connect call_home/[email protected]$ORASVC 
152  update call_home_headers set LAST_UPDATED_DATE = sysdate where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$DB_DETAILS_DB' and APP_SERVER='$A  PP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB'); 
153  exit 
154  endSQL` 
155  `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL 
156  connect call_home/[email protected]$ORASVC 
157  update call_home_headers set DATA_DATE = TO_DATE('$DATA_DATE_FILE','yyyy/MM/dd HH/MI/SS') where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$  DB_DETAILS_DB' and APP_SERVER='$APP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB'); 
158 
159  exit 
160  endSQL` 
161 

아무도 도와 줄 수 있습니까? 나는 이미 dos2unix를 시도했는데 그 이유는 라인 엔딩 때문에 문제가 있다고 생각했지만 작동하지 않았다. 쉘이 명령의 출력을 실행하려고 있도록

감사

+6

왜 명령을 백틱으로 사용해야합니까? –

+1

전체 블록을 명령으로 실행해야한다고 가정하고, 백틱을 제거하면 오류도 제거됩니다. 감사합니다. – Sid

+2

명령을 그룹화하려면'{}'을 사용하십시오. 이 경우 heredoc 만 있으면됩니다. 백틱은 쉘이 명령을 실행하고 출력을 저장하도록합니다. 당신이 그들을 사용하는 방법, 그 다음 명령으로 그 출력을 평가하려고합니다. –

답변

1

당신의 sqlplus 명령의 각각은, 역 인용 부호에 있습니다. 출력이 유효한 쉘이 아닌 것 같아서 그것이 불평입니다. 그들이 신뢰할 수있는 출처 (즉, 사용자가 아닌 입력) '과'돈 '에서 오는 경우가 아니면 사용 $ORASVC 및 기타 변수를 소독하는 것이 좋습니다 수 있습니다

"$ORACLE_HOME"/bin/sqlplus -s /nolog <<endSQL 
connect call_home/[email protected]$ORASVC 
update call_home_headers set LAST_UPDATED_DATE = sysdate where (...); 
endSQL 

:

간단한 수정은 역 인용 부호를 제거하는 것입니다 SQL에 의미있는 것을 포함합니다. 그렇지 않으면 악용되기를 기다리는 SQL 인젝션 취약점이 있습니다.