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: Fernando Mercês
Subject: Re: [shell-script] como mudar o valor de um parametro?
Date: Tue, 7 Aug 2012 10:48:12 -0300

Bem, eu uso o echo para o que seria um retorno:

$ func() { echo maluco; }
$ ret=$(func)
$ echo $ret
maluco

Assim eu posso "retornar" números, strings etc. E no caso de alterar o
$1, por que não usar uma variável global ao script? Tipo:

arq=
func() {
   arq="$1"
   novo=${1// /}
   mv "$arq" "$novo"
   arq=$novo
}

arq terá o nome sem espaços, fora da função. Resolve não?

Abraços.

Att,

Fernando Mercês
Linux Registered User #432779
www.mentebinaria.com.br
------------------------------------
"Ninguém pode ser escravo de sua identidade; quando surge uma
possibilidade de mudança é preciso mudar". (Elliot Gould)


2012/8/7 Julio C. Neves <address@hidden>:
> 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]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> 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
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>


reply via email to

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