2013-10-06 4 views
1

예를 들어 하나의 옵션을 선택할 때 한 가지 문제가 있습니다. ./test.sh -f는 "mel"을 인쇄해야하지만 모든 코드를 읽습니다.bash에서 Getopts 옵션을 선택하지 않음

if 조건에 어떻게 들어가고 다른 인수와 함께 전달됩니까?

if getopts :f:d:c:v: arg ; then 

if [[ "${arg}" == d ]] ; then 
    d_ID=$OPTARG 
    eval d_SIZE=\$$OPTIND 
else 
      echo "Option -d argument missing: needs 2 args" 
      echo "Please enter two args: <arg1> <arg2>" 
      read d_ID d_SIZE 
      echo "disc $d_ID $d_SIZE" >> $FILENAME 

fi 


if [[ "${arg}" == c ]] ; then 
    c_NOME="$OPTARG" 
    eval c_ID1=\$$OPTIND 
    eval c_ID2=\$$OPTINDplus1 
    eval c_FICHEIRO=\$$OPTINDplus2 
else 
      echo "Option -c argument missing: needs 4 args" 
      echo "Please enter two args: <arg1> <arg2> <arg3> <agr4>" 
      read c_NOME c_ID1 c_ID2 c_FICHEIRO 
      echo "raidvss $c_NOME $c_ID1 $c_ID2 $c_FICHEIRO" >> $FILENAME 

fi 

if [[ "${arg}" == f ]] ; then 
    echo "mel" 

fi 


fi 

답변

2

getopts 매개 변수를 잘못 사용하고 있습니다.

if getopts :f:d:c:v: arg 

당신이 원하는 단지 (값없이) -f이있는 경우 -f 당신이

if getopts :fd:c:v: arg ; then 

(I로 변경해야

-f 5 

처럼, 매개 변수의 값에 따라 것을 의미합니다 ':'을 (를) 삭제했습니다. 또한 while주기와 case 문을 더 잘 사용해야한다고 생각합니다.

이 예를 참조

while getopts fd:c:v: opt 
do 
    case "$opt" in 
     f) echo "mel";; 
     d) discFunction "$OPTARG";; 
     c) otherFunction "$OPTARG";; 
     v) nop;; 
    \?) echo "$USAGE" >&2; exit 2;; 
    esac 
done  

shift `expr $OPTIND - 1` 
관련 문제