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