getopts

Este comando serve para permitir que você use parâmetros na linha de comando de maneira mais eficiente que ficar usando as variáveis de posição de parâmetros ($1, $2...).

Sua sintaxe é:

getopts 'CadeiaDeOpcoes' variavel

Onde CadeiaDeOpcoes consiste em cada caractere que o getopts considerará, e variavel receberá este caractere. Para passar um parâmetro para o script você usa -c onde c é o parâmetro. Veja este exemplo hipotético:

getopts 'ab:c' variavel

Você poderá usar os parâmetros a, b ou c. Note que b é seguido de um :, isso significa que b é um parâmetro que precisa de argumento. Este, por sua vez, é armazenado na variável OPTARG.

Mais detalhadamente, o getopts funciona assim:

  1. Examina todos os argumentos da linha de comando procurando por argumentos que comecem com o caractere -.

  2. Quando acha um argumento começado com -, procura em CadeiaDeOpcoes se tem algum caractere que combine.

  3. Se combinar com algum, variavel receberá este caractere, caso contrário variavel receberá ?.

  4. Os passos 1-3 são repetidos até que todos os argumentos da linha de comando tenham sido lidos.

  5. Quando acaba de ler todos os argumentos da linha de comando getops retorna um valor falso (não-zero). Isto é útil para verificações em loops (como veremos no exemplo abaixo).

Hmmm... Confuso? Numa primeira olhada é confuso mesmo, é muita informação de uma vez só. Portanto dê uma olhada no exemplo a seguir, execute-o e depois releia este tópico. Não se esqueça de fazer o mais importante: praticar!

#!/bin/bash
# getopts.sh

USAGE="Uso: `basename $0` [-h] [-n nome] [-e email]"

[ $1 ] || { echo $USAGE ; exit 1 ; }

# observe que 'n' e 'e' precisam de argumentos
while getopts 'hn:e:' PARAMETRO; do

# atente para a utilidade do "case"! ;-)
    case $PARAMETRO in

	h) echo -n "
Script de exemplo de uso do \"getopts\".

Uso: `basename $0` [opções]

Onde as opções podem ser:

-n nome         imprime nome
-e email        imprime email
-h              exibe esta mensagem" ;;

	n) NOME=$OPTARG ;;

	e) EMAIL=$OPTARG ;;

	*) echo -n "Entre \"`basename $0` -h\" para ajuda." ;;
    esac
done

[ $NOME ] && echo $NOME
[ $EMAIL ] && echo $EMAIL

Execute este código e tire suas próprias conclusões.

results matching ""

    No results matching ""