이것이 나의 첫 번째 질문입니다.
옵션이 포함된 작은 스크립트를 만들려고 하는데 getopts
이렇게 하고 있습니다. 이상한 점은 다음과 같습니다.
매개변수가 변수에 할당되지 않거나 항상 if
코드 블록에 들어갑니다(이것이 문제인 것 같습니다).
스크립트는 다음과 같습니다.
#!/bin/bash
function work () {
echo "It Works" }
function help () {
echo "Print some help and options" }
while getopts ha:b: OPT; do
case $OPT in
-h)
help
exit
;;
-a)
OPTA=$OPTARG
;;
-b)
OPTB=$OPTARG
;;
\?)
help
break
;;
esac done
echo $OPTB
if [[ -z $OPTB ]]; then
echo "ERROR. Needs OPTB"
fi
if [[ -n $OPTB ]]; then
echo "All OK untill here"
work
fi
항상 오류 메시지를 인쇄합니다.
답변1
getopts
옵션에서 "-" 기호를 제거하세요.
따라서 다음이 필요합니다.
while getopts ha:b: OPT; do
case $OPT in
h)
help
exit
;;
a)
....
getopts
unset OPTA OPTB
변수는 스크립트가 수신하는 환경에 있을 수 있으므로 ()를 호출하기 전에 변수를 지워야 합니다 . 또한 " 옵션 없음 "과 " 빈 인수가 있는 옵션"을 구별할 수 없으므로 -b ""
스크립트 호출이 유효한 경우 도 고려하십시오.[[ -z $OPTB ]]
-b
-b