Linux/Shell Script

[Shell Script] Basics - 2

비번변경 2022. 5. 15. 21:51

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로 처리한다.