Processamento da opção Getopts, É possível adicionar um [FILE] não hifenizado?

5

Estou usando getopts para todos os meus scripts que exigem análise avançada de opções e funcionou muito bem com dash . Estou familiarizado com o uso básico básico de getopts , que consiste em [-x] e [-x OPTION] .

É possível analisar opções como essa?

 dash_script.sh FILE -x -z -o OPTION
 ## Or the inverse?
 dash_script.sh -x -z -o OPTION FILE
    
por J. M. Becker 24.01.2012 / 07:36

2 respostas

5

Argumentos de script geralmente vêm depois das opções. Dê uma olhada em outros comandos, como cp ou ls , e você verá que esse é o caso.

Então, para lidar com:

dash_script.sh -x -z -o OPTION FILE

você pode usar getopts como mostrado abaixo:

while getopts xzo: option
do
    case "$option" in
        x) echo "x";;
        z) echo "z";;
        o) echo "o=$OPTARG";;
    esac
done
shift $(($OPTIND-1))
FILE="$1"

Depois de processar as opções, getopts define $OPTIND para o índice do primeiro argumento não-opcional que, neste caso, é FILE .

    
por 24.01.2012 / 10:39
2

O Getopt reorganizará os parâmetros e colocará todos os parâmetros não opcionais no final, após -- :

$ getopt -o a: -- nonoption-begin -a x nonoption-middle -a b nonoption-end
-a 'x' -a 'b' -- 'nonoption-begin' 'nonoption-middle' 'nonoption-end'

Se você realmente precisa saber que um parâmetro nonoption está no começo, você pode verificar se $1 é uma opção, e se não é extraí-lo, antes de chamar getopt :

if [ ${1#-} = $1 ]; then
  NONOPTION=$1
  shift
fi
ARGS=$(getopt ...)
    
por 24.01.2012 / 10:22