[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Entendendo argumentos - meio longo
From: |
J. F. Mitre |
Subject: |
Entendendo argumentos - meio longo |
Date: |
Sat, 29 Jan 2005 21:11:46 -0200 |
User-agent: |
KMail/1.7.2 |
Olá.
Para resolver um problema de scripts com argumentos não tão diretos, a algum
tempo eu fiz a função abaixo:
# Combinações a serem testadas
# checkinput -a -i arquivo -s arquivo -b -q
# checkinput -a -i arquivo -b -q -s arquivo
# checkinput -a -i arquivo -s arquivo -b
# Recebendo todos os inputs para vetor interno
IN=$*
checkinput(){
# Lista de controle :
# 0 (ZERO), desativado, 1 (UM) ativado, 2 (DOIS) ativado com argumentos
# Opções Default;
A_STATUS=0
I_STATUS=0
S_STATUS=0
B_STATUS=0
Q_STATUS=0
for j in $IN; do
# Captando os argumentos das opções
if [ $I_STATUS == 1 ]; then I_STATUS=2; I_ARGUMENT=$j; fi
if [ $S_STATUS == 1 ]; then S_STATUS=2; S_ARGUMENT=$j; fi
[ $j == -a ] && A_STATUS=1
[ $j == -i ] && I_STATUS=1
[ $j == -s ] && S_STATUS=1
[ $j == -b ] && B_STATUS=1
[ $j == -q ] && Q_STATUS=1
done
}
O script consegue dentro de todas as opções encontrar na lista de argumentos
do script qual a opção selecionada, se essa opção tem ou não "argumento",
para posterior execução.
Entretando recentemente eu tive um outro problema, que vou retratar aqui
atravé de um exemplo MUITO mais simples, mas que também carrega o problema na
qual aparecia o seguinte:
Exemplo (INSTALAÇÃO DE PACOTES DEBIAN)
Bom imaginem que tivesse "sido eu" o criador do aptget "clone do apt-get" :>),
para esse problema, eu poderia:
#----------------------------------------------
#!/bin/bash
# MeuScriptExemplo: aptget
checkinputs(){.........} #Declaração da função acima
checkinputs # Executa a função
funcao # entende_checkinputs_retorna PARAM de forma correta
# Transforma OPCAO_STATUS em algo prático PARAM
apt-get $PARAM
#-------------------------------
Como eu usaria
aptget install pacote
===>ação: baixa e instala o pacote e dependências após confirmação
aptget -d install pacote
===>ação: baixa o pacote e dependências após confirmação
aptget -d install pacote -y
===>ação: baixa o pacote e dependências e NÂO pede confirmação
Todos esses três exemplos, são perfeitamente compreendidos pelo meu script,
mas se eu tentasse:
=======================
aptget -d install pacote1 pacote2
=======================
O check inputs não saberia como manipular esse problema, ele não saberia
manipular o segundo pacote, eu até poderia fazer pequenas modificações e
resolver o problema inicial, em especial assumindo que todos os últimos
argumentos estão vinculados a uma mesma opção. mas aí eu não conseguiria ver
a parte final, ou seja; o -y ,
aptget -d install pacote1 pacote2 ... pacoteN -y
Em alguns problemas eu pude manipular arquivos, ou seja, se o arquivo existe
então ele não é uma opção e sim um argumento de opção, mas nesse caso
exemplo, percebe-se claramente que na verdade eu nao tenho o menor controle
sequer em quantos pacotes serão pedidos pelo usuário, que não são arquivos e
ainda não sei nem ao menos quantas e quais opções viram após esse pacote.
Bom, efim, alguem têm alguma idéia de como tratar multiplas opções cada uma
tendo muiltiplos argumentos e ainda totalmente fora de uma ordem prévia
Desculpe pelo tamanho do e-mail, mas quiz detalhar o problema de onde ele
estava até onde ele foi resolvido e qual especificamente é a dúvida
Procurei na internet mas não achei ninguem que tivesse feito isso, ou pelo
menos, ninguém que tenha precisado disso, os scripts que conheço no máximo
tem multiplas opções que quando tem argumentos, tem apenas um,,,,,
Eu já ia até esquecendo:
enquanto eu não resolvo o problema da forma que eu gostaria, estou usando
algo do tipo:
aptget -d install "pacote1 pacote2 ... pacoteN" -y
# O checkinput entende perfeitamente esse troço aqui em cima
Eu queria abandonar as aspas....
Bem, qualquer ajuda é muito bem vinda
Obrigado.
J. F. Mitre
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Entendendo argumentos - meio longo,
J. F. Mitre <=