HOWTO · Bash

Bash에서 명령줄 인수 구문 분석

이것은 bash의 인수를 위치 매개변수로 구문 분석하고, 플래그를 사용하고, 루프 구성을 사용하고, 시프트 연산자를 사용하는 다양한 방법을 보여줍니다.

이 페이지의 내용

이 자습서에서는 플래그, 루프 구성 및 시프트 연산자를 사용하여 bash 스크립트에 대한 명령줄 인수를 위치 매개변수로 구문 분석하는 방법을 보여줍니다.

Bash에서 위치 매개변수 구문 분석

위치 매개변수는 bash 스크립트에 전달된 순서대로 액세스됩니다. 첫 번째 매개변수는 $1, 두 번째 매개변수는 $2 등으로 액세스됩니다.

echo "I am $1";
echo  "And I live in $2";

두 개의 위치 인수를 사용하여 스크립트를 실행합니다.

bash positional_args.sh John USA

출력:

I am John
And I live in USA

Bash에서 플래그로 인수 구문 분석

플래그는 각 인수 앞에 하이픈 -으로 시작합니다. 플래그가 사용될 때 인수의 순서는 중요하지 않습니다.

아래 스크립트에서 getopts는 입력에서 플래그를 읽고 OPTARG는 이를 해당 값과 일치시킵니다.

while getopts n:c: flag

do
    case "${flag}" in
          n) name=${OPTARG};;
          c) country=${OPTARG}
     esac
done
echo "I am $name";
echo  "And I live in $country";

실행:

bash flags.sh -n fumbani  -c Malawi

출력:

I am fumbani
And I live in Malawi

Bash에서 루프 구조로 인수 구문 분석

루프 구조는 인수 크기를 미리 알 수 없는 경우에 유용합니다. $@는 모든 입력 매개변수를 포함하는 변수입니다. for 루프는 모든 인수를 반복하고 전달된 각 인수를 처리합니다.

i=1
for arg in "$@"
do
    printf "argument $i: $arg\n"
    i=$((i + 1 ))
done

실행:

bash arguments_loop.sh USA Europe Africa Asia

출력:

argument 1: USA
argument 2: Europe
argument 3: Africa
argument 4: Asia

Bash에서 shift로 인수 구문 분석

shift 연산자는 이동된 위치에서 시작하는 인수의 인덱싱을 만듭니다. 우리의 경우 끝에 도달할 때까지 인수를 1만큼 이동합니다. $#는 입력 크기를 나타내고 $1은 매번 다음 인수를 나타냅니다.

i=1
max=$#
while (( $i <= $max ))
do
    printf "Argument $i: $1\n"
    i=$((i + 1 ))
    shift 1
done

실행:

bash shift.sh one two three

출력:

Argument 1: one
Argument 2: two
Argument 3: three