Bash에서 명령줄 인수 구문 분석
Fumbani Banda
2023년1월30일
이 자습서에서는 플래그, 루프 구성 및 시프트 연산자를 사용하여 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
작가: Fumbani Banda