shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RES: [shell-script] Parâmetros


From: Julio Cezar Neves - DATAPREVRJ
Subject: RES: [shell-script] Parâmetros
Date: Tue, 7 Dec 2004 16:02:36 -0300

Aê Daniel,
me desculpe mandar no formato html, mas é para não perder a formatação do
OOo.

 


BM__Toc28414210BM__Toc69724084Fatiando opções


O comando getopts recupera as opções e seus argumentos de uma lista de
parâmetros de acordo com a sintaxe, isto é, letras após um sinal de menos
(-) seguidas ou não de um argumento; no caso de somente letras elas devem
ser agrupadas. Você deve usar este comando para "fatiar" opções e argumento
passados para o seu script.

Sintaxe: getopts cadeiadeopcoes nome

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"
/>

A cadeiadeopcoes deve explicitar uma cadeia de caracteres com todas as
opções reconhecidas pelo script, assim se o script reconhece as opções -a -b
e -c, cadeiadeopcoes deve ser abc. Se você deseja que uma opção seja seguida
por um argumento, ponha dois-pontos (:) depois da letra, como em a:bc. Isto
diz ao getopts que a opção -a tem a forma:

-a argumento

Normalmente um ou mais espaços em branco separam o parâmetro da opção; no
entanto, getopts também manipula parâmetros que vêm colados à opção como em:

-aargumento

 

cadeiadeopcoes não pode conter interrogação (?).

O nome constante da linha de sintaxe acima define uma variável que cada vez
que o comando getopts for executado, receberá a próxima opção dos parâmetros
posicionais e a colocará na variável nome.

getopts coloca uma interrogação (?) na variável definida em nome se ele
achar uma opção não definida em cadeiadeopcoes ou se não achar o argumento
esperado para uma determinada opção.

Como já sabemos, cada opção passada por uma linha de comandos tem um índice
numérico, assim, a primeira opção estará contida em $1, a segunda em $2, e
assim por diante. Quando o getopts obtém uma opção, ele armazena o índice do
próximo parâmetro a ser processado na variável OPTIND.

Quando uma opção tem um argumento associado (indicado pelo : na
cadeiadeopcoes), getopts armazena o argumento na variável OPTARG. Se uma
opção não possui argumento ou o argumento esperado não foi encontrado, a
variável OPTARG será "matada" (unset).

O comando encerra sua execução quando:

·         Encontra um parâmetro que não começa por menos (-);

·         O parâmetro especial -- marca o fim das opções;

·         Quando encontra um erro (por exemplo, uma opção não reconhecida).

Exemplo: O exemplo abaixo é meramente didático, servindo para mostrar, em um
pequeno fragmento de código o uso pleno do comando.

$ cat getoptst.sh

#!/bin/sh

 

# Execute assim:

#

#       getoptst.sh  -h  -Pimpressora arq1 arq2

#

# e note que as informacoes de todas as opcoes sao exibidas

#

# A cadeia 'P:h' diz que a opcao -P eh uma opcao complexa

# e requer um argumento, e que h eh uma opcao simples que nao requer

# argumentos.

 

while getopts 'P:h' OPT_LETRA

do

    echo "getopts fez a variavel OPT_LETRA igual a '$OPT_LETRA'"

    echo "  OPTARG eh '$OPTARG'"

done

used_up=`expr $OPTIND - 1`

echo "Dispensando os primeiros \$OPTIND-1 = $used_up argumentos"

shift $used_up

echo "O que sobrou da linha de comandos foi '$*'"

 

Para entendê-lo melhor, vamos executá-lo como está sugerido em seu
cabeçalho:

$ getoptst.sh  -h  -Pimpressora arq1 arq2

getopts fez a variavel OPT_LETRA igual a 'h'

        OPTARG eh ''

getopts fez a variavel OPT_LETRA igual a 'P'

        OPTARG eh 'impressora'

Dispensando os primeiros $OPTIND-1 = 2 argumentos

O que sobrou da linha de comandos foi 'arq1 arq2'

 

Desta forma, sem ter muito trabalho, separei todas as opções com seus
respectivos argumentos, deixando somente os parâmetros que foram passados
pelo operador para posterior tratamento.

Repare que se tivéssemos escrito a linha de comando com o argumento
(impressora) separado da opção (-P), o resultado seria exatamente o mesmo,
exceto pelo OPTIND, já que neste caso ele identifica um conjunto de três
opções/argumentos e no anterior somente dois. Veja só:

$ getoptst.sh -h -P impressora arq1 arq2              Opção -P separada do
argumento

getopts fez a variavel OPT_LETRA igual a 'h'

        OPTARG eh ''

getopts fez a variavel OPT_LETRA igual a 'P'

        OPTARG eh 'impressora'

Dispensando os primeiros $OPTIND-1 = 3 argumentos

O que sobrou da linha de comandos foi 'arq1 arq2'

 

Repare, no exemplo a seguir, que se passarmos uma opção inválida, a variável
$OPT_LETRA receberá um ponto-de-interrogação (?) e a $OPTARG será "apagada"
(unset).

$ getoptst.sh  -f  -Pimpressora arq1 arq2              A opção -f não é
valida

./getoptst.sh: illegal option -- f

getopts fez a variavel OPT_LETRA igual a '?'

        OPTARG eh ''

getopts fez a variavel OPT_LETRA igual a 'P'

        OPTARG eh 'impressora'

Dispensando os primeiros $OPTIND-1 = 2 argumentos

O que sobrou da linha de comandos foi 'arq1 arq2'

:wq
Julio Cezar Neves
- Gerente do Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden
<mailto:address@hidden> 


| -----Mensagem original-----
| De: Daniel [ mailto:address@hidden <mailto:address@hidden> ]
| Enviada em: terça-feira, 7 de dezembro de 2004 15:41
| Para: address@hidden
| Assunto: [shell-script] Parâmetros
|
|
|
|
| fala galera!
| situacao: script que receba parametros e faça uma ação para o
| parametro correspondente
| problema: naum funfa :) (as variaveis do case naum sao reconhecidas)
|
| ps: multiplos parâmetros... pode ser 1, ou 2 ou 1000...
|
|
| -> script
|
|
| for x in $#; do
|     case $x in
|     "-b") echo Bobão
|         ;;
|     "-d") echo diamante
|           ;;
|        *) echo "sem mensagem"
|      esac
| done
|
| --
| agradeço adiantadamente pela atenção :)
|
|
|
|
|
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de
| programação, como perl, C etc. Quem insistir em não seguir
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net <http://www.listas-discussao.cjb.net> 
---------------------------------------------------------------------

Links do Yahoo! Grupos

<http://br.groups.yahoo.com/group/shell-script/> 










[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]