[Linux/Unix] 명령행 인자

2023. 4. 8. 15:54CS/운영체제(OS)

명령행

: 유닉스 시스템에서 사용자가 명령을 입력하는 행을 람ㄹ하낟

  프롬프트가 뜨고 커서가 사용자 입력을 기다리고 있는 행

 

명령행 인자

: 사용자가 명령행에서 명령을 실행할 때 해당 명령(실행 파일명)과 함께 지정하는 인자

  명령의 옵션 / 옵션의 인자 / 명령의 인자

  ex1) ls -l에서 '-l'을 명령행 인자

  ex2) ls /tmp에서 '/tmp'를 명령행 인자

 

명령행 인자의 전달

명령행 인자는 자동으로 프로그램의 main 함수에 전달된다.

보통 main 함수는 다음과 같이 정의한다.

int main(void) { ... }

그러나 main 함수에서 명령행 인자를 전달받으려면 다음과 같이 정의해야 한다.

int main(int argc, char *argv[]) { ... }

첫 번째 인자인 argc는 명령과 인자를 포함한 개수로, 두 번째 인자인 argv 배열의 크기이다.

두 번째 인자인 argv는 명령과 각 인자를 담고 있는 배열이다.

명령행 인자는 argv에 문자열 형태로 저장된다.

 

예제1-6

#include <stdio.h>

int main(int argc, char argv[]) {
	int n;

	printf("argc = %d\n", argc);
	for (n = 0; n < argc; n++)
		printf("argv[%d] = %s\n", n, argv[n]);

	return 0;
}

실행결과

결과
#ex1_6.out -h 100
argc = 3
argv[0] = ex1_6.out
argv[1] = -h
argv[2] = 100

03행 : 명령행 인자를 받기 위해 main 함수에 argc와 argv를 선언한다

06행 : 인자의 개수를 저장한 argc 값을 출력한다

07~08행 : 각 인자를 담은 argv의 내용을 출력한다

실행 결과를 보자. 명령행에서는 실행 파일명인 'ex1_6.out' 외에 '-h'와 '100'을 인자로 입력한다. 따라서 main 함수에 전달된 총 개수를 나타내는 argc 값은 3이 된다. argv[0]엥 실행 파일명이 저장되고, 차례로 인자가 저장됨을 알 수 있다. argv로 전달되는 값들은 문자열이므로 printf 함수로 출력하려면 형식 지정자 %s를 사용해야 한다.

 

 

[유닉스 명령 기본 규칙]

규칙3) 옵션의 이름은 한 글자여야 한다

규칙4) 모든 옵션의 앞에는 하이픈(-)이 있어야 한다

규칙5) 인자가 없는 옵션은 하나의 - 다음에 묶여서 올 수 있다 ex)-xvf

규칙6) 옵션의 첫 번째 인자는 공백이나 탭으로 띄고 입력해야 한다 ex)-l /tmp

규칙7) 인자가 있어야 하는 옵션에서 인자를 생략할 수 없다

규칙9) 명령행에서 모든 옵션은 명령의 인자보다 앞에 와야 한다(ls -l /tmp와 같이 해야 한다. ls /tmp -l과 같이 할 수 없다.)

규칙10) 옵션의 끝을 나타내기 위해 --을 사용할 수 있다