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

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

Re: [shell-script] Parametros em script


From: Thobias Salazar Trevisan
Subject: Re: [shell-script] Parametros em script
Date: Fri, 30 May 2003 20:13:43 -0300 (BRT)

ae frederico,

On Fri, 30 May 2003, Frederico Argolo wrote:

>    Valeu novamente pela atencao, mas o seu script
> funcionou, mas qndo vou aplicar a ideia no meu nao
> funciona. Nao entendi direito o OPTIND.

OPTIND tem o indice do proximo parametro que sera processado.
por isto nao estao funcionado o seu script. Voce esta fazendo o 
shit a cada opcao do getopts.
.....
> $ ./script -t teste -f teste arq
> entrou no t
> Cifrao 1: -f

sim, apos executar o getopts para o -t, o proximo parametro sera 
o -f, como voce faz o shift ele vai virar $1

> $ ./script -f teste -t teste arq
> entrou no f
> Cifrao 1: -t
> 
> Repare que tem algo bem errado. Acho q nao entendi
> direito mesmo o OPTIND.

Voce esta processando os parametros e realizando as operacoes 
referente a ele no mesmo lugar. eh melhor voce passar o getops 
para pegar as opcoes que o usuario passou na linha de comando e 
depois fazer o script para cada um.

se voce quer manter como esta o seu script e
se voce passa sempre *um* arquivo como parametro. pode usar algo 
assim pega pegar o nome dele. Tire o shift $((OPTIND -1)).
Coloque isto antes do getopts.

FILE=$(eval echo \$$#)

Assim, em FILE vai ter o ultimo parametro passado na linha de 
comando.

$ cat y
#!/bin/bash

FILE=$(eval echo \$$#)
echo arquivo = $FILE

$ ./y um dois tres file
arquivo = file

$ ./y file
arquivo = file

$ ./y -t teste -f x file
arquivo = file

assim eh so usar esta variavel quando quiser se referenciar ao 
arquivo passado como ultimo parametro

Ou faca algo assim:

$ cat x
#!/bin/bash

while getopts t:f: opt; do
        case $opt in
        t)
                COM_T="x"
                ;;
        f)
                COM_F="x"
                ;;
        esac
done
shift $(($OPTIND - 1))
echo "Cifrao 1: $1"
[ $COM_T ] && echo faz o necessario, opcao T
[ $COM_F ] && echo faz o necessario, opcao F

###############################################

$ ./x -t teste arquivo
Cifrao 1: arquivo
faz o necessario, opcao T

$ ./x -t teste -f teste arquivo
Cifrao 1: arquivo
faz o necessario, opcao T
faz o necessario, opcao F

eh soh escolher a melhor abordagem para o seu problema.

falow

-- 
thobias
-------
echo 9446046325380026818553633794429812592304650P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias

____________________________
|                          
| Against - HTML Mail      
| Against - MS ATTACHMENTS 
|                          
----------------------------



reply via email to

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