![쉘 스크립트에 짧은 매개변수를 추가하는 방법](https://linux55.com/image/207843/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%A7%A7%EC%9D%80%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%B6%94%EA%B0%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
옵션을 추가하기 위해 내 스크립트 중 하나에 다음이 있습니다.
parse_opts() {
while [ $# -gt 0 ]; do
case "$1" in
-h|--help)
help=1
shift
;;
-r|--raw)
raw=1
shift
;;
-c|--copy)
copy=1
shift
;;
-s|--sensitive)
sensitive=1
shift
;;
-i|--insensitive)
insensitive=1
shift
;;
*)
shift
;;
esac
done
}
한 가지 문제가 있습니다. 동시에 여러 옵션을 사용할 수 없습니다. 예를 들어, using은 -r -s
유효하지만 using은 -rs
유효하지 않습니다. 별도의 항목을 추가하지 않고 프로그래밍 방식으로 작동하게 하려면 어떻게 해야 합니까? 내가 사용하는 쉘은 sh입니다.
편집: 나는 그것을 하는 방법을 알아냈습니다. 그것은 기반으로합니다이 stackoverflow 답변. 복사해서 붙여넣었지만 필요한 내용으로 대체했습니다.
새 코드:
while getopts hcsi-: OPT; do
# Support long options: https://stackoverflow.com/a/28466267/519360
if [ "$OPT" = "-" ]; then
OPT="${OPTARG%%=*}"
OPTARG="${OPTARG#$OPT}"
OPTARG="${OPTARG#=}"
fi
case "$OPT" in
h|help) help; exit 0 ;; # Call the `help´ function and exit.
c|copy) copy=1 ;;
s|sensitive) case_sensitivity="sensitive" ;;
i|insensitive) case_sensitivity="insensitive" ;;
??*) printf '%s\n' "Illegal option --$OPT" >&2; exit 2 ;;
?) exit 2 ;; # Error reported via `getopts´
esac
done
shift $((OPTIND-1)) # Remove option arguments from the argument list