$ cat test15.sh
#!/bin/bash
# extracting command line options as parameters
#
echo
while [ -n "$1" ]
do
case "$1" in
-a) echo "Found the -a option" ;;
-b) echo "Found the -b option" ;;
-c) echo "Found the -c option" ;;
*) echo "$1 is not an option" ;;
esac
shift
done
$
$ ./test15.sh -a -b -c -d
Found the -a option
Found the -b option
Found the -c option
-d is not an option
$
-d
명령줄 옵션으로 디버깅 또는 제거를 나타냅니다. 그렇다면 일부 스크립트의 명령줄 옵션에 이를 포함할 때 왜 옵션이 아닌 걸까요?
답변1
-d
나타내도록 프로그래밍된 모든 것을 나타내며 반드시 제거되거나 디버깅될 필요는 없습니다. 예 curl
를 들어 -d
데이터 옵션이 있습니다. 스크립트에서 -d
유효한 옵션이 아닙니다 . 옵션은 -a
, -b
및 입니다 -c
. 이 모든 것은 기본적으로 아무것도 하지 않습니다.
while [ -n "$1" ]
do
case "$1" in
-a) echo "Found the -a option" ;;
-b) echo "Found the -b option" ;;
-c) echo "Found the -c option" ;;
*) echo "$1 is not an option" ;;
esac
shift
done
지원을 추가하려면 -d
다음과 같이 사례 설명에 이를 추가해야 합니다.
while [ -n "$1" ]
do
case "$1" in
-a) echo "Found the -a option" ;;
-b) echo "Found the -b option" ;;
-c) echo "Found the -c option" ;;
-d) echo "Found the -d option" ;;
*) echo "$1 is not an option" ;;
esac
shift
done
명령줄 옵션을 처리하는 더 좋은 방법은 getopts
다음과 같은 것을 사용하는 것입니다.
while getopts abcd opt; do
case $opt in
a) echo "Found the -a option";;
b) echo "Found the -b option";;
c) echo "Found the -c option";;
d) echo "Found the -d option";;
*) echo "Error! Invalid option!" >&2;;
esac
done
abcd
예상되는 매개변수의 목록입니다.
a
- 인수가 없는 옵션을 확인하면 -a
지원되지 않는 옵션에 오류가 발생합니다.
a:
- -a
인수가 포함된 옵션을 확인하세요. 지원되지 않는 옵션에 대해서는 오류가 발생합니다. 이 매개변수는 OPTARG
변수 로 설정됩니다 .
abcd
- 지원되지 않는 옵션에 대해 옵션 -a
, -b
, -c
, 을 확인하세요. - 옵션 , , , 을 확인하여 지원되지 않는 옵션의 오류를 제거하세요.-d
:abcd
-a
-b
-c
-d
opt
현재 매개변수를 설정하는 변수입니다(case 문에도 사용됨).