Archive for 5월, 2014

[LINK] defensive bash shell programming

2014/05/30

쉘 스크립트 작성과 관련된 자료는

주로 사용법이나 몇개 없는 샘플이 대부분인 경우인데, 좋은 글이네요. 

http://www.kfirlavi.com/blog/2012/11/14/defensive-bash-programming

 

요약입니다.

1. 전역변수는 불변값으로(Immutable)

readonly 명시

2. 모든 변수는 지역변수로 정의

local 명시

3. main 함수 사용

main() 사용

4. function 사용

나머지는 모두 함수로 작성

5. function 디버깅하기

실행시 -x flag 사용

6. 코드를 좀더 명료하게

함수, 변수 모두 의미를 파악할 수 있게 작성

7. 각 라인당 한가지만 할것

back slash ( \ ) 로 표현식을 각 라인당 나누기

8. 사용법 출력 방법

usage 함수 사용, 많을 경우 cat 사용

9. 커맨드라인 인자처리

인자가 많을 경우, 별도의 커맨드라인 인자 처리 함수를 구현

10. 단위테스트

shunit2 라는 단위테스트용 툴이 있음 ( http://code.google.com/p/shunit2/ )

 

[Tech] Oracle LIKE 사용시 _ (underscore) 주의사항 (special pattern-matching characters)

2014/05/21

– Environment : Oracle 

– Problem :  Like 절 사용시 _ (underscore) 를 사용하면,

wild card 로 인식하여 잘못된 결과를 반환함

ex) SELECT X FROM TAB WHERE ID LIKE ‘AAA_’ 

=> AAA_ ,  AAA0, AAAA  등 모든 것이 검색됨 

 

– cause : oracle like 절에서  underscore  _ 는  정규식의 ? 와 동일한 효과를 낳음 

– solution : underscore 앞에 역슬래시(backslash)를 추가하고 ESCAPE 절을 추가하여 상수문자로 인식하게 처리 

ex)
java :  id = id.replaceAll(“\\”, “\\\\”);   
sql : WHERE id LIKE ‘AAA\_’ ESCAPE ‘\’;

– cf : 역슬래시 대신 다른 문자를 사용해도 가능함 

– retrospective : 심각한 문제가 될 뻔 했음…  oracle 쓸때는 잊지말아야 할 주의사항임. 

– references : http://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm