2022.05.14 - [Shell Script] Basics - 1에 이어서 작성한다.
명령어 작성 시 사용할 수 있는 기능
단어 분리
변수 또는 명령 치환을 quote하지 않으면 값 출력 시 IFS(Internal Field Separator)에 의해 공백을 기준으로 값이 분리된다.
Filename Expansion (Globbing)
출력 값에 glob 문자(*, ?, [ ])가 포함되는 경우, 변수나 명령 치환을 quote하지 않으면 뜻하지 않은 globbing으로 인해 오류가 발생할 수 있다.
$ AA="User-Agent: *" # 변수 AA 값으로 glob 문자 '*' 가 사용됨
$ echo "$AA" # quote 을 하면 globbing 이 발생하지 않음
User-Agent: *
$ echo $AA # quote 을 하지 않아 globbing 이 발생해 뜻하지 않은 값이 출력됨
기타
명령 옵션
명령 옵션은 보통 - 또는 --으로 시작한다. 간혹, 이 명령 옵션에 의해 오류가 발생할 수 있다. 아래와 같이 grep을 이용해 현재 디렉터리 이하 파일로부터 문자열 -n을 찾고자 할 때, -n이 검색 문자열이 아니라 grep 명령의 옵션으로 인식될 수 있기 때문이다.
grep -r '-n'
grep -r "--bar"
이런 경우에는 --를 사용하여, -- 이후로는 옵션이 아니라는 것을 명시할 수 있다.
grep -r -- '-n'
grep -r -- "--bar"
스크립트 작성 시, 명령의 인수로 변수를 사용하는 경우 --를 이용하는 것이 오류를 줄일 수 있는 방법이 될 수 있다.
cd 명령은 종료 상태 확인이 필요하다.
아래와 같은 코드의 경우, cd 명령이 실패하면 현재 디렉터리가 삭제되기 때문이다.
cd ~/tempdir
rm -rf *
따라서 아래와 같이 cd 명령의 성공 여부를 확인하는 것을 권한다.
cd ~/tempdir && rm -rf *
주석
Shell에서 주석은 #로 표시한다. 단, 명령문에서 #가 사용될 수 있으므로 # 앞에 공백이 있어야 주석으로 처리된다.
주석 처리를 방지하고자 할 때에는 escape 또는 quote로 처리한다.