[Shell Script 1] 명령어 옵션 처리

 유닉스 쉘 스크립트 



이 포스팅은 유닉스 리눅스 셸 스크립트 예제 사전의 내용입니다 . 
복습 차 정리 하였습니다 . 



001 명령어 옵션 처리 




이 스크립트 예제에서는 현재 디렉터리에 있는 파일명 목록을 표시 합니다 . 

옵션에 따라 다소 동작이 달라지는데, -a 옵션을 사용하면 숨은 파일(.로 시작 하는 파일) 을 표시 하고 -p 옵션을 사용하면 마지막 줄에 구분자로 표시할 문자열을 지정합니다 . 


또한 기본 값은 현재 디렉터리를 표시하지만 명령행 인수로 디렉터리를 지정하면 그디렉터리가 대상 디렉터리가 됩니다 . 




스크립트 해석 


  1. -a 옵션이 지정 되었는지 판단하는 셸 변수 a_flag를 선언합니다 . 이런 변수를 flag라고 부르며 0으로 초기화 되고 설정되면 1로 바꾸는것이 일반적 입니다 .

  2.  실제 getopts 옵션을 해석합니다 . 옵션에 사용된 문자는 getopts 인수로 나열하며 그 옵션 자체가 인수를 받는 것을 콜론으로 지정합니다 . 


“ap:”는 a 옵션과 p 옵션을 이용하며 p 옵션은 인수로 받는다 .

getopts는 옵션을 앞에서 순서대로 처리합니다 .

“getopts를 사용할 때 while문 조건식으로 opts를 쓰고 while  루프 내부의 case 문으로 판단한다 .” 라는 것은 원칙적으로 잘 기억 해야 합니다 . 

  1. 인수를 받는 옵션 ( getopts에 콜론을 지정한 옵션) 에서 그 인수는 OPTARG라는 셀 변수에 들어 갑니다

  2. OPTAR라는 변수 값을 separator라는 셀 변수에 대입 하며 마지막 출력 때 사용합니다 . 

  3. 지금까지 일치하지 않은 옵션을 5번에서 처리를 합니다 . getopts에서는 무효한 옵션이 지정 되면 “?”가 대입되므로 이걸 case 문에서 처리합니다 . case 처리가 도착하면 옵션 지정에 에러가 있으므로 다음처럼 에러 메세지를 출력하며 종료합니다.






  1.  .shift $(expr $OPTIND -1 )

              path=”$1”


=> 이 줄의 목적은 위치 파라미터($1,$2 …) 로 처리 하기 위함 입니다 . 원래 위치 파라미터는 옵션도 파라미터도 함께 $1,$2,$3...으로 저장됩니다 . 

ex) ./getopts.sh -a -p /home/usr/docs /tmps 

                           $1 $2           $3             $4


getopts 명령어로 옵션 해석이 끝난뒤에 셸 변수 OPTIND 는 ‘ 다음 처리할 위치 파라미터 번호’를 나타냅니다 . 

관용적인 표현으로 암기해 둡니다 . 


  1. 이 스크립트는 옵션이 아닌 일반 명령행 인수로 지정한 디렉터리도 대상입니다 

이때 옵션이 몇개가 지정이 되는지 또는 하나도 지정 되지 않았는지 미리 알지 못하므로 옵션 부분을 shift로 밀어낸 다음 $1을 취득해서 일반적인 명령행 인수를 얻습니다 .

3)에서 설정한 a_flag 값으로 옵션 -a가 지정되었는지를 

  1.  에서 확인하여 처리를 분가 한뒤 ls 명령어로 디렉터리 내용을 표시 합니다 ,.  

  2. 마지막으로 -p로 지정한 구분자를 표시 합니다 . 구분자가  지정되지 않으면 셸 변수 separator은 빈 문자열이 됩니다.  이 문자열이 비었는지 여부를 test 명령어에 -n 연산자를 써서 판별하여 구분자 문자열이 있을 때 출력합니다 . 



인수가 있는 옵션을 여러가지 쓰고 싶다면 콜론을 붙여서 사용합니다