Tratamento de parâmetros em scripts

1. Tratamento de parâmetros em scripts

Marcio Gil
marciomgil

(usa Outra)

Enviado em 29/08/2010 - 15:29h

- Pergunta simplificada:

Tenho uma variável neste formato:

opt="-e[qualquer_coisa]"

Quero remover o "e" de "$opt", então eu faço assim:

$ opt="-equalquer_coisa"
$ echo "$opt" | sed "s/e//"
-qualquer_coisa

Mas se "qualquer_coisa" for vazio não funciona:

$ opt="-e"
$ echo "$opt" | sed "s/e//"


Não retorna nada, mas deveria retornar "-".
Aguém sabe a solução?


- Explicação da pergunta:

Tenho o seguinte script que escrevi para remover arquivos temporários:

http://bash.pastebin.com/ZfawZQmD

Acontece que a opção -e não funciona quando usada nesta forma ou em conjunto com a opção -t (ou seja -te ou -et)

O culpado está na linha 72:

case "$opt" in
-*e*) exe="1"; opt=`echo "$opt" | sed "s/e//"`
esac

Pois quando "$opt" é "-e" o comando echo interpreta como sendo opção dele mesmo. Infelizmente o echo não implementa a opção "--", comum nos comando do Unix e que resolveria o problema.

Pergunto se existe uma forma elegante e o mais portável possível de resolver esta questão. Imaginei acrescentar um "-" extra antes de "$opt", mas se o usuário, por exemplo, informar -x o script vai dizer que --x é inválido...




  


2. Re: Tratamento de parâmetros em scripts

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 29/08/2010 - 15:41h

Existe um comando "built-in" no Bash chamado 'getopts' e ele faz exatamente o que você quer, além do mais existem também um programa externo que faz a mesma coisa, o 'getopt'. Dê uma pesquisada sobre eles.

help getopts
man getopt

Ah, você também pode implementar isso manualmente. Veja esse exemplo:

http://www.vivaolinux.com.br/script/check_mem.sh-Plugin-para-o-Nagios







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts