为什么我在bash中使用getopt时出现多长选项错误?

时间:2016-11-03 21:54:39

标签: bash getopt

我刚刚在bash中编写了一个脚本,它可以用于多长选项:

    #!/bin/bash
OPTS=`getopt -q -o fdhl: -l free,df,help,log:  -- "$*"`
#Check if error with getopt
if [ $? != 0 ]
then
        echo -e  "error: parameter could not be found\n\nUsage:\n supervision [options]\n\n Try 'supervision --help'\n  or 'supervision -h'\n for additional help text." ;      
    exit 1
fi
eval set -- "$OPTS"
while true ; do
    case "$1" in
        -f|--free)
            free -h ; 
            shift;; 
        -d|--df)
            df -h ;  #Run df system command
            shift;;
        -l|--log)
            case "$2" in 
                "") echo "miss file" ;
                        shift 2;; #No file passed as parameter
                *)  
                df -h >> "$2" ;
                 shift 2;;
            esac ;;
        -h|--help) #Display help
               shift;;
        --) #End of parsed parameters list
            shift ; break ;;
        *)
            break   ;;
    esac
done

当我使用超过1个长选项时,我不明白我应该这样做的原因,例如:

sh myscript --free --df

当我使用--log:

sh myscript --log logfile

两个案例都退出if [$? != 0],看起来像第一个长选项后面的元素没有被解析。

1 个答案:

答案 0 :(得分:1)

好的,我想通了,这都归功于" $ *"而不是" $ @"在getopt调用中。我并不完全是为什么,我猜两者都做同样的事情,但事实证明它是造成这个问题的原因。