Shell Script2013.07.03 13:59

각각의 호스트별로 뽑아놓은 데이터를 정제하는 과정에서 문제가 발생했다.

한번 정제한 리스트들을 다시 Mysql Insert 하고 싶은데 EOF 가 닫혀지질 않는다.



for host in A B C

do

    cat 1.list.$host | sed -r '/^$/d' > 2.list.$host

    f_list=`sed '/^$/d' 2.list.$host | cut -d '/' -f 6,7,8 | awk '{print $1}'`

done


for f in $f_list

do

    mysql -u root -pPASSWD MyTable <<EOF

    INSERT INTO tmp_list ('f','date') VALUES ( '$f', sysdate() );

    exit;

    EOF

done



이런 경우 EOF 의 마침부분에는 앞에 공백이 없어야 한다.

아래와 같이 고쳐줘야 정상적인 구문이다. 


for f in $f_list

do

    mysql -u root -pPASSWD MyTable <<EOF

    INSERT INTO tmp_list (f,date) VALUES ( "$f", sysdate() );

    exit;

EOF

done


echo "hello"




그리고 또 sql 구문 활용이 잘못 되었다.

아래와 같이 컬럼명은 "" 로 감싸주지 않아야 한다.


insert into my_talbe (column1, column2) values ("value1", "value2");



EOF 앞 들여쓰기를 제거하지 않고임시방편으로 EOF 를 역쿼테이션(`)으로 감싸서 EOF 를 닫을 수도 있다.

하지만 역쿼테이션안에서 변수 $f 를 구분해주기 위해 싱글쿼테이션 사용하면 구문 오류가 나타난다.


for host in A B C

do

    cat 1.list.$host | sed -r '/^$/d' > 2.list.$host

    f_list=`sed '/^$/d' 2.list.$host | cut -d '/' -f 6,7,8 | awk '{print $1}'`

done


for f in $f_list

do

    `mysql -u root -pPASSWD MyTable <<EOF

    INSERT INTO tmp_list (f,date) VALUES ( '$f', sysdate() );

    exit;

    EOF`

done




EOF 앞 들여쓰기를 제거한 구문으로는 EOF 안에서 변수 $f 를 싱글쿼테이션, 더블쿼테이션 중 무엇으로 감싸도 상관이 없다.

'Shell Script' 카테고리의 다른 글

쉘스크립트에서 EOF 사용하기  (0) 2013.07.03
Posted by 오리지날초이

댓글을 달아 주세요