이것을 사용하고 있습니다 :
예 : ./imgSorter.sh -d directory -f format
스크립트”내용은 다음과 같습니다.
#!/bin/bash while getopts ":d:f:" opt; do case $opt in d) echo "-d was triggered with $OPTARG" >&2 ;; f) echo "-f was triggered with $OPTARG" >&2 ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done
사용 사례 :
$ ./imgSorter.sh -d myDir -d was triggered with myDir
확인
$ ./imgSorter.sh -d -f myFormat -d was triggered with -f
아니요 :-로 시작하는 문자열이 플래그로 감지되지 않는 이유는 무엇입니까?
답변
getopts
에게 -d
옵션은 인수를 가져야합니다. 명령 줄에서는 “-f
가”-f
명확하게 (?) 표시된 -d -f myformat
를 사용합니다. 인수 I “m give to the -d
option”.
이것은 코드 오류가 아니라 명령 줄에서 스크립트를 사용할 때 발생합니다.
코드는 옵션 인수가 정확하고 모든 옵션이 적절한 방식으로 설정되어 있는지 확인해야합니다.
아마도
while getopts "d:f:" opt; do case $opt in d) dir=$OPTARG ;; f) format=$OPTARG ;; *) echo "error" >&2 exit 1 esac done # If -d is *required* if [ ! -d "$dir" ]; then echo "Option -d missing or designates non-directory" >&2 exit 1 fi # If -d is *optional* if [ -n "$dir" ] && [ ! -d "$dir" ]; then echo "Option -d designates non-directory" >&2 exit 1 fi
-d
옵션이 선택 사항이고 변수에 기본값 값을 사용하려는 경우 dir
위 코드에서 dir
를 while
loop.
명령 줄 옵션은 인수를받을 수도없고 인수 할 수도 없습니다.
댓글
- 알겠습니다. 감사합니다. @Kusalananda, 나는 getopts가 플래그 시작을 위해 모든 것을 취했다고 잘못 생각했습니다.