스크립트에 대한 명령줄 옵션

스크립트에 대한 명령줄 옵션
$ 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 문에도 사용됨).

관련 정보