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

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

Re: [Bulk] Re: [Bulk] Re: [shell-script] atualizar valor de variável


From: Julio C. Neves
Subject: Re: [Bulk] Re: [Bulk] Re: [shell-script] atualizar valor de variável
Date: Tue, 9 Dec 2014 10:05:55 -0200

Aviso a vc e a todos os colegas de lista: se alguém pensa em comprar meu livro, espere um pouco, em Janeiro será lançada a 7a. edição que terá 100 páginas a mais e virá com um super reforço na linguagem sed, entre outras novidades.

Pensei em tornar a 10ª edição a última, parando por aí, pelo menos até que fosse lançado um Bash 5.0, mas a abrangência dessa linguagem é tão grande que ela não para de me surpreender. Para provar isso, veja o que descobri sobre vetores ontem, que já redigi para uma futura edição e coloco abaixo da assinatura desse e-mail (como sempre, aceito sugestões e críticas).

Qdo for comprá-lo, faça-o pelo site da editora (www.brasport.com.br) e peça 30% de desconto. Isso é um trato que fiz com o editor. Leitor dos meus livros têm 30% de desconto em qq livro da editora.

Abcs,
Julio
@juliobash
P
róximos cursos de Shell
Cidade         Local Período
Rio de Janeiro EDX 09 a 13/03/15
São Paulo 4Linux 24 a 28/11/14
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Como já vimos, no Bash, para atribuirmos valores a um vetor, basta fazer a atribuição colocando os valores entre parênteses:

Praias=(Copacabana Ipanema Leblon)

Vamos ver o que isso gerou:

for ((i=0; i<=5; i++))

do

     printf "%d%20s\n" $i "${Praias[i]}"

done

0 Copacabana

1 Ipanema

2 Leblon

3

4

5

Gostaria de incluir outras praias, aí eu tento fazer:

Praias=([3]="Arraial do Cabo" [4]="Buzios" [5]="Cabo Frio")

Vamos aproveitar o for anterior e ver como ficou:

for ((i=0; i<=5; i++))

do

     printf "%d%20s\n" $i "${Praias[i]}"

done

0

1

2

3 Arraial do Cabo

4 Buzios

5 Cabo Frio

Epa, dessa forma, escrevi por cima, isto é, substituí o conteúdo existente por um novo valor. Vamos restaurar os valores iniciais das praias:

Praias=(Copacabana Ipanema Leblon)

Para anexar outros valores a esse vetor, temos de trocar atribuição pelo modelo de pré incrementação típico da aritmética no Shell (+=), veja:

Praias+=("Arraial do Cabo" Buzios "Cabo Frio")

Mais uma vez aproveitando o for anterior, vem:

for ((i=0; i<=5; i++))

do

     printf "%d%20s\n" $i "${Praias[i]}"

done

0 Copacabana

1 Ipanema

2 Leblon

3 Arraial do Cabo

4 Buzios

5 Cabo Frio

Quando trabalhamos com vetores, outro caso interessante de ser analisado é o seguinte:

$ echo ${Praias[-1]}

Cabo Frio

$ echo ${Praias[-2]}

Buzios

Deve ter dado para notar que índices negativos são relativos ao fim do vetor assim ${Praias[-1]} aponta para o último elemento do vetor e ${Praias[-2]} para o penúltimo.





Em 9 de dezembro de 2014 08:50, Sidney Souza address@hidden [shell-script] <address@hidden> escreveu:
 

Agradeço a explicação Julio, 

Entendi o exemplo perfeitamente, mas de igual maneira pretendo fazer seu curso, afinal o conhecimento não pesa. Quando 
você vir à Porto Alegre e região metropolitana peço que me avise porque ficaria muito feliz e fazê-lo presencial. Também 
pretendo comprar o seu livro, mas isso ainda vai demorar um pouco.

Mais uma vez obrigado!

2014-12-08 12:08 GMT-02:00 Herbert Parentes Fortes Neto (hpfn) address@hidden [shell-script] <address@hidden>:
 

On Mon, 8 Dec 2014 11:25:55 -0200
"'Julio C. Neves' address@hidden [shell-script]" <address@hidden> wrote:

> Epa eu pensei que seu while estivesse rodando em um sub shell e qdo saísse
> do loop as variáveis estariam perdidas, mas pelo que vc mostrou, não existe
> sub shell.
>
> Agora quem não está entendendo sou eu, já que as suas variáveis não serão
> perdidas e estarão visíveis ao longo de todo o script.
>

é apenas uma questão cosmética. queria assim:

GREP_LINES=$(grep -a "ACESSO SSH" /var/log/kern.log)

while true
do
while true
do
# tirar isso daqui
#GREP_LINES=$(grep -a "ACESSO SSH" /var/log/kern.log | tail -n1)

ip=$(eval $FILTER_IP <<< "$GREP_LINES_atualizada_magicamente")

mas desse jeito o valor de GREP_LINES é sempre o mesmo. vou testar usando
uma função simples.

--
Herbert Parentes Fortes Neto (hpfn)




reply via email to

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