Alinhamento de Texto em Shell Script [RESOLVIDO]

1. Alinhamento de Texto em Shell Script [RESOLVIDO]

Diego Veras de Oliveira
DiegoVeras

(usa Ubuntu)

Enviado em 23/07/2018 - 15:15h

Gente, preciso fazer um programa em Shell Script que tenha a seguinte saída:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
Sendo os números centralizados e a última linha o valor do parâmetro passado na chamada do programa.


  


2. Re: Alinhamento de Texto em Shell Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 23/07/2018 - 20:42h

DiegoVeras escreveu:

Gente, preciso fazer um programa em Shell Script que tenha a seguinte saída:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
Sendo os números centralizados e a última linha o valor do parâmetro passado na chamada do programa.


Boa noite Diego,
Segue:

#!/bin/bash
tput clear
COLS=$(($(tput cols)/2))
for ((n=1;n<=${1};n++));do
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g";
done

./numeros.sh 8

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
7 7 7 7 7 7 7
8 8 8 8 8 8 8 8

Marcelo Oliver


3. Re: Alinhamento de Texto em Shell Script [RESOLVIDO]

Diego Veras de Oliveira
DiegoVeras

(usa Ubuntu)

Enviado em 24/07/2018 - 11:07h

msoliver escreveu:

DiegoVeras escreveu:

Gente, preciso fazer um programa em Shell Script que tenha a seguinte saída:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
Sendo os números centralizados e a última linha o valor do parâmetro passado na chamada do programa.


Boa noite Diego,
Segue:

#!/bin/bash
tput clear
COLS=$(($(tput cols)/2))
for ((n=1;n<=${1};n++));do
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g";
done

./numeros.sh 8

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
7 7 7 7 7 7 7
8 8 8 8 8 8 8 8

Marcelo Oliver


Po, cara, valeu mesmo. Ajudou bastante. Mas, sem querer ser chato, tem como me explicar essas 2 linhas?:

COLS=$(($(tput cols)/2)) 
e
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g";



4. Re: Alinhamento de Texto em Shell Script [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 24/07/2018 - 22:49h

DiegoVeras escreveu:

msoliver escreveu:

DiegoVeras escreveu:

Gente, preciso fazer um programa em Shell Script que tenha a seguinte saída:
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
Sendo os números centralizados e a última linha o valor do parâmetro passado na chamada do programa.


Boa noite Diego,
Segue:

#!/bin/bash
tput clear
COLS=$(($(tput cols)/2))
for ((n=1;n<=${1};n++));do
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g";
done

./numeros.sh 8

1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
7 7 7 7 7 7 7
8 8 8 8 8 8 8 8

Marcelo Oliver


Po, cara, valeu mesmo. Ajudou bastante. Mas, sem querer ser chato, tem como me explicar essas 2 linhas?:

COLS=$(($(tput cols)/2)) 
e
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g";


Vamos lá:
COLS=$(($(tput cols)/2)) 

É a quantidade de colunas no terminal, teste ai:
echo $(tput cols)
Divido por dois e depois subtraio "n", para centralizar o texto.
printf "\e[$((n+5));$((COLS-n))f%${n}s\n"|sed "s/ /${n} /g"; 

Isso é uma característica do "printf", onde é definido a linha, a coluna e quantos caracteres serão impresso, só que imprimo "nada" e depois troco os espaços em branco pelo número desejado, com o "sed".
Uso muito para "imprimir" linha nos scripts.
É isso.
Sem querer se chato . . . Rsrsrsrsr
Marque o tópico como resolvido e escolha a "MELHOR RESPOSTA"...

Att.:
Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts