테이블을 잘라내는 스크립트를 작성하고 있습니다. 문제는 스크립트가 무한 루프로 진행된다는 것입니다.테이블을 잘라내는 데 사용되는 셸 스크립트에서 루프를 나누는 방법은 무엇입니까?
./n_input
에는 스크립트에 사용되는 환경 변수가 포함되어 있습니다.
#!/bin/ksh
INPUT_FILE=./n_input
if [ ! -e $INPUT_FILE ];
then
echo "Error: Input file require"
exit 1
fi
source $INPUT_FILE
while read Table
do
TABLE="$DSTN_DATABASE.dbo.$Table"
echo "Table : $TABLE"
QUERY="truncate table $TABLE"
echo $QUERY > ./tmp_file
sqlcmd -m 1 -U $DSTN_USER -P $DSTN_PASSWORD -D -S $DSTN_SERVER -m1 -i ./tmp_file
RET_VALUE=$?
if [ $RET_VALUE -ne 0 ]
then
echo "Error $TABLE"
fi
done < $TABLE_LIST
exit 0
루프를 어떻게 끊을 수 있습니까? 스크립트에서 sqlcmd
을 제거하고 작동하는지 확인하려고했습니다. 예상대로 작동합니다. sqlcmd -Q
옵션과 동일한 동작을 관찰했습니다.
$TABLE_LIST
파일에는 하나의 테이블 이름 만 있습니다.
편집과 대답을 주셔서 감사합니다 ... 문제는 sqlcmd ... sqlcmd는 입력을 기다리고 무한하게 보입니다 .. EOF를 sqlcmd에 전달하여 해결 된 문제는 sqlcmd -U $ DSTN_USER -P $ DSTN_PASSWORD -D입니다. -S $ DSTN_SERVER <<-EOF \ n $ QUERY \ n go \ n EOF' ' – Pravin
@Pravin, "_sqlcmd는 입력을 기다리고 while은 무한 _에 들어갑니다."- 그것이 내가 의미 한 것입니다. 그러나 쿼리에';'또는'; go;'를 추가하는 것으로 충분할 것으로 생각됩니다. 그러나, 문서에서는 쿼리에'go' 터미네이터를 사용하지 않는 것이 좋습니다. 따라서 하나의';'가 문제를 해결해야합니다. 세미콜론을 추가하려고 시도 했습니까? –