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

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

Re: [shell-script] como mudar o valor de um parametro?


From: Julio C. Neves
Subject: Re: [shell-script] como mudar o valor de um parametro?
Date: Tue, 7 Aug 2012 10:14:52 -0300

Epa! Já que meu nome foi citado, vou dar o meu pitaco. O uso de funções em
shell, difere do prg pp dito somente em 2 aspectos:
   1- O retorno da função é feito prelo cmd return e não pelo exit;
   2- Na função, pode-se declarar uma variável como local:
local Var=5
e é isso que possibilita vc ter os parâmetros $1, $2, ..., $n passados para
as diversas funções, diferentes entre si e tb diferentes dos parâmetros
passados para o prg principal.

Assim sendo, a má notícia é que na função f1 é impossível alterar os
valores de qqs parâmetros de f2, f3, ... fn ou do prg principal. A boa
notícia é que não existe a menor necessidade nem sentido de se fazer isso.
Pq não usar arrays, p. ex., para fazer o transporte de dados entre funções?

Abcs,
Julio

*
*



Em 6 de agosto de 2012 16:16, Emerson Domingues Souto - H2M <
address@hidden> escreveu:

> **
>
>
> Deixa eu ver se entendi:
>
> Vc quer que o conteúdo de ${1} do 1º echo seja diferente do 2º echo ? é
> isso mesmo ? mas em que linha da sua shell que a variável ${1} foi
> modificada ? Aliás, agora segue uma pergunta que acho que só o Júlio saberá
> responder:
>
> A gente consegue dentro do shell alterar o valor de $1, $2, etc ?
>
>
> Emerson Domingues Souto
>
> Tecnologia da Informação
>
> Marítima Seguros S/A
>
> De: address@hidden [mailto:
> address@hidden] Em nome de Isac Luz
>  Enviada em: segunda-feira, 6 de agosto de 2012 15:36
>
> Para: address@hidden
> Assunto: Re: [shell-script] como mudar o valor de um parametro?
>
> Vou exemplificar para ver se consigo me fazer entender:
>
> 1. Tenho um sh masomenos assim:
> #!/bin/sh
> #
> # nexx_funcoes.sh - Concentra as funções mais usadas pelos scripts internos
> em Produção
> #
> # Autor: Isac R. Luz <address@hidden <mailto:isacluz%40gmail.com> > <
> address@hidden <mailto:isacluz%40gmail.com> >
>
> # Origem: 02/08/2012
> #
> #----------------------------------------------------------
>
> ...
> renomeiaArquivoComEspaco() {
> verificaParametros "$@"
> verificaSeArquivo "$@"
> dir=$(dirname "${1}")
> arq=$(basename "${1}")
> mv -v "${dir}/${arq}" "${dir}/${arq// /}" 2> /dev/null
> if [ ${?} -ne 0 ]; then
> echo "Ocorreu algum problema ao mover o arquivo de entrada:
> ${dir}/${arq} para ${dir}/${arq// /} !"
> exit 1
> else
> set - "${dir}/${arq// /}"
> echo "Parametro 0 = ${0}"
> echo "Parametro 1 = ${1}"
> fi
> }
> ...
>
> exit
>
> E existem no servidor outros sh que irão utilizar essa função do tipo:
>
> #!/bin/sh
> #
> # exec_conversao_layout.sh - Efetua a verificação do layout de entrada e
> converte para novo layout
> #
> # Autor: Isac R. Luz <address@hidden <mailto:isacluz%40gmail.com> > <
> address@hidden <mailto:isacluz%40gmail.com> >
>
> # Origem: 21/11/2011
> #
> #----------------------------------------------------------
> source /home/user/config/ nexx_funcoes.sh
>
> ...
> # 1o echo
> echo "Arquivo de entrada = ${1}!"
> renomeiaArquivoComEspaco ${1}
> # 2o echo
> echo "Arquivo de saida = ${1}!"
>
> ${TRADUTOR} ${BC} ${1} ${ArqSaida} verbose=true
> if [ $? -eq 0 ]; then
> comandos
> else
> erroTradutor $@
> exit 1
> fi
>
> exit 0
>
> Neste contexto, após a execução do renomeia, o parâmetro ${1} do primeiro
> echo será igual ao parâmetro ${1} do segundo echo, ou seja, ainda com
> espaço, quando na verdade ele já foi renomeado.
>
> Esse é o dilema que pretendo resolver.
>
> Em 6 de agosto de 2012 12:12, Emerson Domingues Souto - H2M <
> address@hidden <mailto:emersons.h2m%40maritima.com.br> >
> escreveu:
>
>
> > **
> >
> >
> > Então, será que o problema não é pq a variável $1 entende como parâmetro
> > de entrada o inicio da string até o espaço em branco ? ou seja, vc pensa
> > que está passando 1 parâmetro quando na verdade a função entende que são
> 2
> > parâmetros de entrada ?
> >
> > Se for isso a solução é usar $* no lugar de $1
> >
> > Exemplo:
> >
> > renomeiaArquivoComEspaco() {
> > dir=$(dirname "$*")
> > entrada=$(basename "$*")
> >
> > saida=$(echo "${entrada}" |sed 's/ //g')
> > mv -v "$*" "${dir}/${saida}"
> >
> > set - "${dir}/${saida}"
> > echo "Parametro Entrada = $*"
> > }
> >
> > Emerson Domingues Souto
> >
> > Tecnologia da Informação
> >
> > Marítima Seguros S/A
> >
> > De: address@hidden <mailto:
> shell-script%40yahoogrupos.com.br> [mailto:
> > address@hidden <mailto:
> shell-script%40yahoogrupos.com.br> ] Em nome de Isac Luz
>
> > Enviada em: segunda-feira, 6 de agosto de 2012 11:56
> > Para: address@hidden <mailto:
> shell-script%40yahoogrupos.com.br>
>  > Assunto: Re: [shell-script] como mudar o valor de um parametro?
> >
> >
> > então, estou criando um arquivo com funções que serão executados por
> > outros scripts, e neste caso essa função será bastante utilizada por
> > outros usuarios, o problema é que consigo mudar o valor do parametro 1
> > dentro da função, mas fora não consigo atribuir o novo valor
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


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



reply via email to

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