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

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

Re: [shell-script] Múltiplas variáveis em um loop


From: Julio C. Neves
Subject: Re: [shell-script] Múltiplas variáveis em um loop
Date: Fri, 25 Nov 2016 11:00:29 -0200

​​
​​
Fala Casanova,
o rotatório do Pacman foi a base da sua resposta, entendido. Mas a citação no meu livro que já havia feito a seu nome, foi sobre uma contribuição sua na lista, na qual vc postou uma função que recebia um texto e colocava uma moldura semigráfica em torno do texto passado. Veja ele e o exemplo:

function DrawBox
{
    string="$*";
    tamanho=${#string}
    tput setf 3; printf "\e(0\x6c\e(B"
    for i in $(seq $tamanho)
    do
        printf "\e(0\x71\e(B"
    done
    printf "\e(0\x6b\e(B\n"; tput sgr0;
    tput setf 3; printf "\e(0\x78\e(B"
    tput setf 4; tput bold; echo -n $string; tput sgr0
    tput setf 3; printf "\e(0\x78\e(B\n"; tput sgr0;
    tput setf 3; printf "\e(0\x6d\e(B"
    for i in $(seq $tamanho)
    do
        printf "\e(0\x71\e(B"
    done
    printf "\e(0\x6a\e(B\n"; tput sgr0;
}

$ DrawBox Frase para mostrar para a lista
┌───────────────────────────────┐
│Frase para mostrar para a lista│
└───────────────────────────────┘

Só que essa caixa é azul (tput setf 3) e as letras são vermelhas, com ênfase (tput setf 4; tput bold).

E esses printf maluco representam:

O printf

Produz

\e(0\x6c\e(B

\e(0\x71\e(B

\e(0\x6b\e(B

\e(0\x78\e(B

\e(0\x6d\e(B

\e(0\x6a\e(B



​Depois, como sempre, sugeri que o for que ele usou para fazer as linhas horizontais fosse trocado por Shell puro, assim substituiríamos:

for i in $(seq $tamanho)
do
​    ​printf "\e(0\x71\e(B"
done

Por:

printf -v linha "%${tamanho}s" ' '
printf -v traco "\e(0\x71\e(B"
echo -n ${linha// /$traco}

​F
​icando:

function DrawBox
{
    string="$*";
    tamanho=${#string}
    tput setf 3; printf "\e(0\x6c\e(B"
    printf -v linha "%${tamanho}s" ' '
    printf -v traco "\e(0\x71\e(B"
    echo -n ${linha// /$traco}
    printf "\e(0\x6b\e(B\n"; tput sgr0;
    tput setf 3; printf "\e(0\x78\e(B"
    tput setf 4; tput bold; echo -n $string; tput sgr0
    tput setf 3; printf "\e(0\x78\e(B\n"; tput sgr0;
    tput setf 3; printf "\e(0\x6d\e(B"
    printf -v linha "%${tamanho}s" ' '
    printf -v traco "\e(0\x71\e(B"
    echo -n ${linha// /$traco}
    printf "\e(0\x6a\e(B\n"; tput sgr0;
}

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 24 de novembro de 2016 17:25, Alfredo Casanova address@hidden [shell-script] <address@hidden.br> escreveu:
 


On Thu, Nov 24, 2016 at 5:24 PM Alfredo Casanova <address@hidden> wrote:
Foi algo que você chamou de "rotatório Peczenyj" no Papo de Botequim! Pode procurar que está por lá.
No exemplo era um loop pra iterar todas as opções do chmod

On Thu, Nov 24, 2016 at 5:20 PM 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br> wrote:
 

alias Pacman="Tiago Peczenyj"

Tb já foi citado (como quase todos os mais antigos/ativos da lista), mas achei que essa era sua...


Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 24 de novembro de 2016 17:05, Alfredo Casanova address@hidden [shell-script] <address@hidden.br> escreveu:
 

Na verdade aquela solução é do Thiago Peczne**** (não sei escrever o sobrenome e não achei na lista), só lembrei e adaptei!

De toda forma, é sempre motivo de orgulho ser citado pelo Mestre!

On Thu, Nov 24, 2016 at 2:43 PM 'Julio C. Neves' address@hidden [shell-script] <address@hidden.br> wrote:
 

Eu não havia visto a solução do Casanova, por sinal, brilhante tb e que incluirei, mas já havia me referido a ele em outro pedaço e vou repetir, pq é um macete legal:
============================================

Já tinha mandado a 10ª edição deste livro para a editora quando o Alfredo Casanova, colega da lista shell-script do yahoo groups, mandou a seguinte dica para a nossa lista:

"Só compartilhando uma funçãozinha que fiz aqui pra desenhar caixas de mensagem (só funciona para mensagens com uma linha, se alguém quiser alterar, fique à vontade)"

E nos brindou com esse código:

function DrawBox

{

string="$*";

tamanho=${#string}

tput setf 3; printf "\e(0\x6c\e(B"

for i in $(seq $tamanho)

do printf "\e(0\x71\e(B"

done

printf "\e(0\x6b\e(B\n"; tput sgr0;

tput setf 3; printf "\e(0\x78\e(B"

tput setf 4; tput bold; echo -n $string; tput sgr0

tput setf 3; printf "\e(0\x78\e(B\n"; tput sgr0;

tput setf 3; printf "\e(0\x6d\e(B"

for i in $(seq $tamanho)

do printf "\e(0\x71\e(B"

done

printf "\e(0\x6a\e(B\n"; tput sgr0;

}

Seu uso seria da seguinte forma:

$ DrawBox Qualquer frase que caiba no terminal

======================================

Mas não deu tempo de sair na 10a. edição e está saindo nessa.

Toda vez que vejo algo muito bom na lista, publico com o nome do autor, para que outros possam usufruir estes macetes.


Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 05
-09/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 24 de novembro de 2016 11:50, address@hidden [shell-script] <address@hidden.br> escreveu:
 

Grande Meste Júlio


Eu que agradeço a referência, e jamais me importaria

Aliás, o mérito é da lista como um todo, pois sempre há alguém com uma solução para um problema igualmente interessante.

Apredi e aprendo demais com todos aqui, e na medida que posso retribuo o ensinamento que recebi.

Nem precisa perguntar, qualquer citação feita por ti Júlio eu considero como uma grande honra.

E a sugestão do Casanova deu também é outro forma muito legal de solucionar o problema.

Isso só corrobora o seu dito muito comum e que todos já conhecem!

Valeu!

[]'s
Itamar





reply via email to

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