Discussion:
[shell-script] Um animação em ascii
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2016-12-23 13:07:30 UTC
Permalink
Senhores, fiz este script já há alguns anos e acho que em todo Natal ele
renasce.

Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem tempo, mas
se algum de vcs quiser colocá-lo num site, sem problema algum.

Se quiser personalizá-lo para mandar para algum amigo, substitua no o valor
da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\ da Lista\
Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo (repare que só
deixo o Shell "ver" um espaços, os outros estão com contrabarras).

Feliz Natal a todos




#!/bin/bash
# Versão 2.0
# Isso foi feito para mostrar que em shell se
# pode fazer de tudo, inclusive na tela.
#
# Autor: Julio Neves
#

trap "tput reset; tput cnorm; exit" 2
function MontaArr
{
# Monta um array Arr[$Lin$Col] (ambas com zeros à esqueda)
#+ com o caracteres que está naquela posição
local i
local l
for ((i=0; i<${#3}; i++))
{
l="${3:i:1}"
Arr[$(printf "$1%02i" $[$2+$i])]="$l:$4"
}
}
NomeIni=(Aos\ Amigos\ da Lista\ Shell) # Troque $NomeIni para enviar a
amigos, mas
#+ sempre pelo menos 1 e no máximo 2
nomes ;)
Ano=$(($(date +%m) < 10 ? $(date +%Y) : $(date +%Y) + 1))

# Preparando nome para escrever no canto inferior direito da tela
for ((Pos=0; ;Pos++))
{
s0=${NomeIni[0]:$Pos:1}
s0=${s0:- }
s1=${NomeIni[1]:$Pos:1}
s1=${s1:- }
[[ $s0 == ' ' && $s1 == ' ' ]] && break
Nome="$Nome$s0 $s1"
}
# Montando a Árvore
ColLogo=$[$(tput cols)-4]
LinLogo=$[$(tput lines)-$Pos-1]
LogoTrab=0
tput civis
lin=2
col=$(($(tput cols) / 2))
ccnev=$[col - 13]
c=$((col-1))
est=$((c-2))
cor=0
tput setab 0; clear
tput setaf 2; tput bold
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
MontaArr $lin $[col+j] \* 2
}
let lin++
let col--
}
tput sgr0; tput setab 0; tput setaf 3; tput bold
for ((i=1; i<=2; i++))
{
MontaArr $lin $[c+1] mWm 3
tput cup $((lin++)) $c
echo mWm
}
tput setab 0; tput setaf 7; tput bold
tput cup $lin $((c - 4)); echo BOAS FESTAS
MontaArr $lin $[c-3] "BOAS FESTAS" 7
tput cup $((lin + 1)) $((c - 11)); echo E muito suSHELLso em $Ano
MontaArr $((lin + 1)) $((c - 10)) "E muito suSHELLso em $Ano" 7
# tput cup $((lin + 3)) $UltCol; echo $UltLin
let c++
k=1
# Pendurando as bolas (da árvore, claro!)
while true
do
for ((i=1; i<=35; i++))
{
# Apagando a bola que foi ligada há 35 rodadas atras
[ $k -gt 1 ] && {
tput setab 0; tput setaf 2; tput bold
tput cup ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]}; echo \*
MontaArr ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]} \* 2
unset linha[$[k-1]$i]; unset coluna[$[k-1]$i] # Mantenha limpo
o vetor
}
li=$((RANDOM % 9 + 3))
ini=$((c-li+2))
fim=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + ini))
tput setab 0; tput setaf $cor; tput bold # Troca cor das bolas
tput cup $li $co
echo o
linha[$k$i]=$li
coluna[$k$i]=$co
MontaArr $li $co o $cor
sh=1
for l in S H E L L
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
done
# Olha a neve
for ((n=0; n<15; n++))
{
[ "${nev[n]}" ] || {
nev[n]=$[RANDOM % 12 + 1]$(printf "%02i" $[RANDOM % 25 +
ccnev])
}
lnev=$[nev[n] / 100]
cnev=$[nev[n] % 100]
idx=$lnev$(printf "%02i" $cnev)
Antigo=${Arr[10#$idx-100]%:*}
Antigo=${Antigo:-' '}
CorAnt=${Arr[10#$idx-100]#*:}
CorAnt=${CorAnt:-0}
tput setab 0
tput setaf $CorAnt
tput cup $[lnev-1] $[cnev-1]
echo "$Antigo"
tput setab 0; tput setaf 7; tput cup $lnev $[cnev-1]; echo .
let lnev++
nev[n]=$lnev$(printf "%02i" $cnev)
[ $lnev -gt 16 ] && {
tput setab 0; tput setaf 7; tput cup $[lnev-1] $[cnev-1];
echo " "
unset nev[n]
}
tput setaf $[n%7+1]
tput cup $[LinLogo+LogoTrab] $ColLogo
echo "${Nome:$[LogoTrab*3]:3}"
(( LogoTrab++ == Pos-1)) && {
LogoTrab=0
}
}
cor=$(((cor+1)%8))
}
k=$((k % 2 + 1))
done

​Feliz Natal
,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso do
tput. A ideia é que o script mostrasse a mensagem de tempo no final da tela
(rodando em background), mas que pudesse liberar o shell na parte de cima
para que o usuário pudesse fazer outras coisas e quando a contagem
encerrar, finalizaria com outra mensagem de fim. Sei que é possível dividir
a tela com o tput, mas não sei como fazer. Há alguma forma de liberar o
shell para o usuário, enquanto a mensagem é mostrada no final da tela? Ou
seja, limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para o
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
Fernando Mercês nandu88@gmail.com [shell-script]
2016-12-23 14:19:10 UTC
Permalink
Dá-lhe Julio. Todo natal esperamos o update neste script! =)

Coloquei num pastebin pra facilitar: http://pastebin.com/vZnKL5Tq

Grande abraço.


Att,

@MercesFernando
mentebinaria.com.br <http://www.mentebinaria.com.br>
---------------------------
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Senhores, fiz este script já há alguns anos e acho que em todo Natal ele
renasce.
Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem tempo,
mas se algum de vcs quiser colocá-lo num site, sem problema algum.
Se quiser personalizá-lo para mandar para algum amigo, substitua no o
valor da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\ da
Lista\ Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo (repare
que só deixo o Shell "ver" um espaços, os outros estão com contrabarras).
Feliz Natal a todos
#!/bin/bash
# Versão 2.0
# Isso foi feito para mostrar que em shell se
# pode fazer de tudo, inclusive na tela.
#
# Autor: Julio Neves
#
trap "tput reset; tput cnorm; exit" 2
function MontaArr
{
# Monta um array Arr[$Lin$Col] (ambas com zeros à esqueda)
#+ com o caracteres que está naquela posição
local i
local l
for ((i=0; i<${#3}; i++))
{
l="${3:i:1}"
Arr[$(printf "$1%02i" $[$2+$i])]="$l:$4"
}
}
NomeIni=(Aos\ Amigos\ da Lista\ Shell) # Troque $NomeIni para enviar a
amigos, mas
#+ sempre pelo menos 1 e no máximo
2 nomes ;)
Ano=$(($(date +%m) < 10 ? $(date +%Y) : $(date +%Y) + 1))
# Preparando nome para escrever no canto inferior direito da tela
for ((Pos=0; ;Pos++))
{
s0=${NomeIni[0]:$Pos:1}
s0=${s0:- }
s1=${NomeIni[1]:$Pos:1}
s1=${s1:- }
[[ $s0 == ' ' && $s1 == ' ' ]] && break
Nome="$Nome$s0 $s1"
}
# Montando a Árvore
ColLogo=$[$(tput cols)-4]
LinLogo=$[$(tput lines)-$Pos-1]
LogoTrab=0
tput civis
lin=2
col=$(($(tput cols) / 2))
ccnev=$[col - 13]
c=$((col-1))
est=$((c-2))
cor=0
tput setab 0; clear
tput setaf 2; tput bold
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
MontaArr $lin $[col+j] \* 2
}
let lin++
let col--
}
tput sgr0; tput setab 0; tput setaf 3; tput bold
for ((i=1; i<=2; i++))
{
MontaArr $lin $[c+1] mWm 3
tput cup $((lin++)) $c
echo mWm
}
tput setab 0; tput setaf 7; tput bold
tput cup $lin $((c - 4)); echo BOAS FESTAS
MontaArr $lin $[c-3] "BOAS FESTAS" 7
tput cup $((lin + 1)) $((c - 11)); echo E muito suSHELLso em $Ano
MontaArr $((lin + 1)) $((c - 10)) "E muito suSHELLso em $Ano" 7
# tput cup $((lin + 3)) $UltCol; echo $UltLin
let c++
k=1
# Pendurando as bolas (da árvore, claro!)
while true
do
for ((i=1; i<=35; i++))
{
# Apagando a bola que foi ligada há 35 rodadas atras
[ $k -gt 1 ] && {
tput setab 0; tput setaf 2; tput bold
tput cup ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]}; echo \*
MontaArr ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]} \* 2
unset linha[$[k-1]$i]; unset coluna[$[k-1]$i] # Mantenha
limpo o vetor
}
li=$((RANDOM % 9 + 3))
ini=$((c-li+2))
fim=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + ini))
tput setab 0; tput setaf $cor; tput bold # Troca cor das bolas
tput cup $li $co
echo o
linha[$k$i]=$li
coluna[$k$i]=$co
MontaArr $li $co o $cor
sh=1
for l in S H E L L
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
done
# Olha a neve
for ((n=0; n<15; n++))
{
[ "${nev[n]}" ] || {
nev[n]=$[RANDOM % 12 + 1]$(printf "%02i" $[RANDOM % 25 +
ccnev])
}
lnev=$[nev[n] / 100]
cnev=$[nev[n] % 100]
idx=$lnev$(printf "%02i" $cnev)
Antigo=${Arr[10#$idx-100]%:*}
Antigo=${Antigo:-' '}
CorAnt=${Arr[10#$idx-100]#*:}
CorAnt=${CorAnt:-0}
tput setab 0
tput setaf $CorAnt
tput cup $[lnev-1] $[cnev-1]
echo "$Antigo"
tput setab 0; tput setaf 7; tput cup $lnev $[cnev-1]; echo .
let lnev++
nev[n]=$lnev$(printf "%02i" $cnev)
[ $lnev -gt 16 ] && {
tput setab 0; tput setaf 7; tput cup $[lnev-1] $[cnev-1];
echo " "
unset nev[n]
}
tput setaf $[n%7+1]
tput cup $[LinLogo+LogoTrab] $ColLogo
echo "${Nome:$[LogoTrab*3]:3}"
(( LogoTrab++ == Pos-1)) && {
LogoTrab=0
}
}
cor=$(((cor+1)%8))
}
k=$((k % 2 + 1))
done
​Feliz Natal
,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso do
tput. A ideia é que o script mostrasse a mensagem de tempo no final da tela
(rodando em background), mas que pudesse liberar o shell na parte de cima
para que o usuário pudesse fazer outras coisas e quando a contagem
encerrar, finalizaria com outra mensagem de fim. Sei que é possível dividir
a tela com o tput, mas não sei como fazer. Há alguma forma de liberar o
shell para o usuário, enquanto a mensagem é mostrada no final da tela? Ou
seja, limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para o
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2016-12-23 14:55:51 UTC
Permalink
Valeu Mercês.

Abcs,
Julio

*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*

​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Best Sellers​ ​*​laureados ​sobre os temas. P. exemplo:

*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Post by Fernando Mercês ***@gmail.com [shell-script]
Dá-lhe Julio. Todo natal esperamos o update neste script! =)
Coloquei num pastebin pra facilitar: http://pastebin.com/vZnKL5Tq
Grande abraço.
Att,
@MercesFernando
mentebinaria.com.br <http://www.mentebinaria.com.br>
---------------------------
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Senhores, fiz este script já há alguns anos e acho que em todo Natal ele
renasce.
Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem tempo,
mas se algum de vcs quiser colocá-lo num site, sem problema algum.
Se quiser personalizá-lo para mandar para algum amigo, substitua no o
valor da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\ da
Lista\ Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo (repare
que só deixo o Shell "ver" um espaços, os outros estão com contrabarras).
Feliz Natal a todos
#!/bin/bash
# Versão 2.0
# Isso foi feito para mostrar que em shell se
# pode fazer de tudo, inclusive na tela.
#
# Autor: Julio Neves
#
trap "tput reset; tput cnorm; exit" 2
function MontaArr
{
# Monta um array Arr[$Lin$Col] (ambas com zeros à esqueda)
#+ com o caracteres que está naquela posição
local i
local l
for ((i=0; i<${#3}; i++))
{
l="${3:i:1}"
Arr[$(printf "$1%02i" $[$2+$i])]="$l:$4"
}
}
NomeIni=(Aos\ Amigos\ da Lista\ Shell) # Troque $NomeIni para enviar a
amigos, mas
#+ sempre pelo menos 1 e no máximo
2 nomes ;)
Ano=$(($(date +%m) < 10 ? $(date +%Y) : $(date +%Y) + 1))
# Preparando nome para escrever no canto inferior direito da tela
for ((Pos=0; ;Pos++))
{
s0=${NomeIni[0]:$Pos:1}
s0=${s0:- }
s1=${NomeIni[1]:$Pos:1}
s1=${s1:- }
[[ $s0 == ' ' && $s1 == ' ' ]] && break
Nome="$Nome$s0 $s1"
}
# Montando a Árvore
ColLogo=$[$(tput cols)-4]
LinLogo=$[$(tput lines)-$Pos-1]
LogoTrab=0
tput civis
lin=2
col=$(($(tput cols) / 2))
ccnev=$[col - 13]
c=$((col-1))
est=$((c-2))
cor=0
tput setab 0; clear
tput setaf 2; tput bold
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
MontaArr $lin $[col+j] \* 2
}
let lin++
let col--
}
tput sgr0; tput setab 0; tput setaf 3; tput bold
for ((i=1; i<=2; i++))
{
MontaArr $lin $[c+1] mWm 3
tput cup $((lin++)) $c
echo mWm
}
tput setab 0; tput setaf 7; tput bold
tput cup $lin $((c - 4)); echo BOAS FESTAS
MontaArr $lin $[c-3] "BOAS FESTAS" 7
tput cup $((lin + 1)) $((c - 11)); echo E muito suSHELLso em $Ano
MontaArr $((lin + 1)) $((c - 10)) "E muito suSHELLso em $Ano" 7
# tput cup $((lin + 3)) $UltCol; echo $UltLin
let c++
k=1
# Pendurando as bolas (da árvore, claro!)
while true
do
for ((i=1; i<=35; i++))
{
# Apagando a bola que foi ligada há 35 rodadas atras
[ $k -gt 1 ] && {
tput setab 0; tput setaf 2; tput bold
tput cup ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]}; echo \*
MontaArr ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]} \* 2
unset linha[$[k-1]$i]; unset coluna[$[k-1]$i] # Mantenha
limpo o vetor
}
li=$((RANDOM % 9 + 3))
ini=$((c-li+2))
fim=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + ini))
tput setab 0; tput setaf $cor; tput bold # Troca cor das bolas
tput cup $li $co
echo o
linha[$k$i]=$li
coluna[$k$i]=$co
MontaArr $li $co o $cor
sh=1
for l in S H E L L
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
done
# Olha a neve
for ((n=0; n<15; n++))
{
[ "${nev[n]}" ] || {
nev[n]=$[RANDOM % 12 + 1]$(printf "%02i" $[RANDOM % 25 +
ccnev])
}
lnev=$[nev[n] / 100]
cnev=$[nev[n] % 100]
idx=$lnev$(printf "%02i" $cnev)
Antigo=${Arr[10#$idx-100]%:*}
Antigo=${Antigo:-' '}
CorAnt=${Arr[10#$idx-100]#*:}
CorAnt=${CorAnt:-0}
tput setab 0
tput setaf $CorAnt
tput cup $[lnev-1] $[cnev-1]
echo "$Antigo"
tput setab 0; tput setaf 7; tput cup $lnev $[cnev-1]; echo .
let lnev++
nev[n]=$lnev$(printf "%02i" $cnev)
[ $lnev -gt 16 ] && {
tput setab 0; tput setaf 7; tput cup $[lnev-1] $[cnev-1];
echo " "
unset nev[n]
}
tput setaf $[n%7+1]
tput cup $[LinLogo+LogoTrab] $ColLogo
echo "${Nome:$[LogoTrab*3]:3}"
(( LogoTrab++ == Pos-1)) && {
LogoTrab=0
}
}
cor=$(((cor+1)%8))
}
k=$((k % 2 + 1))
done
​Feliz Natal
,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso do
tput. A ideia é que o script mostrasse a mensagem de tempo no final da tela
(rodando em background), mas que pudesse liberar o shell na parte de cima
para que o usuário pudesse fazer outras coisas e quando a contagem
encerrar, finalizaria com outra mensagem de fim. Sei que é possível dividir
a tela com o tput, mas não sei como fazer. Há alguma forma de liberar o
shell para o usuário, enquanto a mensagem é mostrada no final da tela? Ou
seja, limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para o
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
Terminal Root terminalroot.com.br@gmail.com [shell-script]
2016-12-24 12:44:55 UTC
Permalink
Grande Julião, vc é o cara, curti muito o resultado e pus lá no blog,
abraços e feliz natal pra vc e todos do grupo!

http://terminalroot.com.br/2016/12/feliz-natal-com-bash-por-julio-neves.html
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Valeu Mercês.
Abcs,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Post by Fernando Mercês ***@gmail.com [shell-script]
Dá-lhe Julio. Todo natal esperamos o update neste script! =)
Coloquei num pastebin pra facilitar: http://pastebin.com/vZnKL5Tq
Grande abraço.
Att,
@MercesFernando
mentebinaria.com.br <http://www.mentebinaria.com.br>
---------------------------
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Senhores, fiz este script já há alguns anos e acho que em todo Natal ele
renasce.
Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem tempo,
mas se algum de vcs quiser colocá-lo num site, sem problema algum.
Se quiser personalizá-lo para mandar para algum amigo, substitua no o
valor da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\ da
Lista\ Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo (repare
que só deixo o Shell "ver" um espaços, os outros estão com contrabarras).
Feliz Natal a todos
#!/bin/bash
# Versão 2.0
# Isso foi feito para mostrar que em shell se
# pode fazer de tudo, inclusive na tela.
#
# Autor: Julio Neves
#
trap "tput reset; tput cnorm; exit" 2
function MontaArr
{
# Monta um array Arr[$Lin$Col] (ambas com zeros à esqueda)
#+ com o caracteres que está naquela posição
local i
local l
for ((i=0; i<${#3}; i++))
{
l="${3:i:1}"
Arr[$(printf "$1%02i" $[$2+$i])]="$l:$4"
}
}
NomeIni=(Aos\ Amigos\ da Lista\ Shell) # Troque $NomeIni para enviar a
amigos, mas
#+ sempre pelo menos 1 e no
máximo 2 nomes ;)
Ano=$(($(date +%m) < 10 ? $(date +%Y) : $(date +%Y) + 1))
# Preparando nome para escrever no canto inferior direito da tela
for ((Pos=0; ;Pos++))
{
s0=${NomeIni[0]:$Pos:1}
s0=${s0:- }
s1=${NomeIni[1]:$Pos:1}
s1=${s1:- }
[[ $s0 == ' ' && $s1 == ' ' ]] && break
Nome="$Nome$s0 $s1"
}
# Montando a Árvore
ColLogo=$[$(tput cols)-4]
LinLogo=$[$(tput lines)-$Pos-1]
LogoTrab=0
tput civis
lin=2
col=$(($(tput cols) / 2))
ccnev=$[col - 13]
c=$((col-1))
est=$((c-2))
cor=0
tput setab 0; clear
tput setaf 2; tput bold
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
MontaArr $lin $[col+j] \* 2
}
let lin++
let col--
}
tput sgr0; tput setab 0; tput setaf 3; tput bold
for ((i=1; i<=2; i++))
{
MontaArr $lin $[c+1] mWm 3
tput cup $((lin++)) $c
echo mWm
}
tput setab 0; tput setaf 7; tput bold
tput cup $lin $((c - 4)); echo BOAS FESTAS
MontaArr $lin $[c-3] "BOAS FESTAS" 7
tput cup $((lin + 1)) $((c - 11)); echo E muito suSHELLso em $Ano
MontaArr $((lin + 1)) $((c - 10)) "E muito suSHELLso em $Ano" 7
# tput cup $((lin + 3)) $UltCol; echo $UltLin
let c++
k=1
# Pendurando as bolas (da árvore, claro!)
while true
do
for ((i=1; i<=35; i++))
{
# Apagando a bola que foi ligada há 35 rodadas atras
[ $k -gt 1 ] && {
tput setab 0; tput setaf 2; tput bold
tput cup ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]}; echo \*
MontaArr ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]} \* 2
unset linha[$[k-1]$i]; unset coluna[$[k-1]$i] # Mantenha
limpo o vetor
}
li=$((RANDOM % 9 + 3))
ini=$((c-li+2))
fim=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + ini))
tput setab 0; tput setaf $cor; tput bold # Troca cor das bolas
tput cup $li $co
echo o
linha[$k$i]=$li
coluna[$k$i]=$co
MontaArr $li $co o $cor
sh=1
for l in S H E L L
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
done
# Olha a neve
for ((n=0; n<15; n++))
{
[ "${nev[n]}" ] || {
nev[n]=$[RANDOM % 12 + 1]$(printf "%02i" $[RANDOM % 25 +
ccnev])
}
lnev=$[nev[n] / 100]
cnev=$[nev[n] % 100]
idx=$lnev$(printf "%02i" $cnev)
Antigo=${Arr[10#$idx-100]%:*}
Antigo=${Antigo:-' '}
CorAnt=${Arr[10#$idx-100]#*:}
CorAnt=${CorAnt:-0}
tput setab 0
tput setaf $CorAnt
tput cup $[lnev-1] $[cnev-1]
echo "$Antigo"
tput setab 0; tput setaf 7; tput cup $lnev $[cnev-1]; echo .
let lnev++
nev[n]=$lnev$(printf "%02i" $cnev)
[ $lnev -gt 16 ] && {
tput setab 0; tput setaf 7; tput cup $[lnev-1]
$[cnev-1]; echo " "
unset nev[n]
}
tput setaf $[n%7+1]
tput cup $[LinLogo+LogoTrab] $ColLogo
echo "${Nome:$[LogoTrab*3]:3}"
(( LogoTrab++ == Pos-1)) && {
LogoTrab=0
}
}
cor=$(((cor+1)%8))
}
k=$((k % 2 + 1))
done
​Feliz Natal
,
Julio
*​Damos treinamento em sua empresa por *
*um preço, no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores *in company* é formado somente por
​
​
autores
​ ​
​
de
*Shell* básico e Programação em *Shell* Julio Neves
*Bacula* Heitor Medrado
*Zabbix* Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso do
tput. A ideia é que o script mostrasse a mensagem de tempo no final da tela
(rodando em background), mas que pudesse liberar o shell na parte de cima
para que o usuário pudesse fazer outras coisas e quando a contagem
encerrar, finalizaria com outra mensagem de fim. Sei que é possível dividir
a tela com o tput, mas não sei como fazer. Há alguma forma de liberar o
shell para o usuário, enquanto a mensagem é mostrada no final da tela? Ou
seja, limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para o
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
Alexandre Mulatinho alex@mulatinho.net [shell-script]
2016-12-23 14:27:48 UTC
Permalink
Senhores, fiz este script já há alguns anos e acho que em todo Natal ele renasce.
Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem tempo, mas se algum de vcs quiser colocá-lo num site, sem problema algum.
Se quiser personalizá-lo para mandar para algum amigo, substitua no o valor da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\ da Lista\ Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo (repare que só deixo o Shell "ver" um espaços, os outros estão com contrabarras).
Feliz Natal a todos
Excelente! Sempre fui fã de arte ascii!

Feliz natal a todos, para uma das listas mais úteis do Brasil!!

[]z Alexandre Mulatinho
Gmail t.collons@gmail.com [shell-script]
2016-12-24 22:14:28 UTC
Permalink
Des de Barcelona, Catalunya, Europa,


Bon Nadal "Aos\ Amigos\ da Lista\ Shell" com diu el mestre Julio al seu
script.



Pere

***@gmail.com <mailto:***@gmail.com>



<http://www.imatge.com/>

------------------------------------

AVIS LEGAL

Nota de confidencialitat: Aquest missatge podria contenir missatges
d'empresa i altre informació confidencial tutelada per les lleis de
Europea i altres estats, Si VostÚ el rep per error o sense ser una de
les persones esmenades a la capçalera, haurà de destruir-lo sense
copiar-lo ni revelar-l'ho o qualsevol altre acció relacionada amb el
contingut del missatge i notificar-ho per correu electrònic a l'emissor
del missatge.

Les persones o entitats que incompleixin els deures de confidencialitat
podran ésser perseguides davant dels Tribunals de Justícia sota l'empar
de la legislació civil, penal i administrativa nacional i internacional.

Gracies per la seva cooperació.

------------------------------------

LEGAL NOTICE

Confidentiality notice: This mail may include business and other
confidential information protected under the laws of and other
territories. if you are not one of the intended recipients of the
message, you are legally obliged to delete the message content.
Furthermore, you are kindly requested to report immediately the incident
to the sender.

Breach of confidentiality duties is a serious criminal offence in and
other territories. Offenders shall be legally prosecuted worldwide.

Thank you for your cooperation.
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
Senhores, fiz este script já há alguns anos e acho que em todo Natal
ele renasce.
Eu sei que deveria colocá-lo em um site, mas não tenho saco, nem
tempo, mas se algum de vcs quiser colocá-lo num site, sem problema algum.
Se quiser personalizá-lo para mandar para algum amigo, substitua no o
valor da variável NomeIni (linha 22) onde está a cadeia "Aos\ Amigos\
da Lista\ Shell" por "Nome Sobrenome" ou "Nome Apelido" do seu amigo
(repare que só deixo o Shell "ver" um espaços, os outros estão com
contrabarras).
Feliz Natal a todos
#!/bin/bash
# Versão 2.0
# Isso foi feito para mostrar que em shell se
# pode fazer de tudo, inclusive na tela.
#
# Autor: Julio Neves
#
trap "tput reset; tput cnorm; exit" 2
function MontaArr
{
# Monta um array Arr[$Lin$Col] (ambas com zeros à esqueda)
#+ com o caracteres que está naquela posição
local i
local l
for ((i=0; i<${#3}; i++))
{
l="${3:i:1}"
Arr[$(printf "$1%02i" $[$2+$i])]="$l:$4"
}
}
NomeIni=(Aos\ Amigos\ da Lista\ Shell) # Troque $NomeIni para enviar
a amigos, mas
#+ sempre pelo menos 1 e no
máximo 2 nomes ;)
Ano=$(($(date +%m) < 10 ? $(date +%Y) : $(date +%Y) + 1))
# Preparando nome para escrever no canto inferior direito da tela
for ((Pos=0; ;Pos++))
{
s0=${NomeIni[0]:$Pos:1}
s0=${s0:- }
s1=${NomeIni[1]:$Pos:1}
s1=${s1:- }
[[ $s0 == ' ' && $s1 == ' ' ]] && break
Nome="$Nome$s0 $s1"
}
# Montando a Árvore
ColLogo=$[$(tput cols)-4]
LinLogo=$[$(tput lines)-$Pos-1]
LogoTrab=0
tput civis
lin=2
col=$(($(tput cols) / 2))
ccnev=$[col - 13]
c=$((col-1))
est=$((c-2))
cor=0
tput setab 0; clear
tput setaf 2; tput bold
for ((i=1; i<20; i+=2))
{
tput cup $lin $col
for ((j=1; j<=i; j++))
{
echo -n \*
MontaArr $lin $[col+j] \* 2
}
let lin++
let col--
}
tput sgr0; tput setab 0; tput setaf 3; tput bold
for ((i=1; i<=2; i++))
{
MontaArr $lin $[c+1] mWm 3
tput cup $((lin++)) $c
echo mWm
}
tput setab 0; tput setaf 7; tput bold
tput cup $lin $((c - 4)); echo BOAS FESTAS
MontaArr $lin $[c-3] "BOAS FESTAS" 7
tput cup $((lin + 1)) $((c - 11)); echo E muito suSHELLso em $Ano
MontaArr $((lin + 1)) $((c - 10)) "E muito suSHELLso em $Ano" 7
# tput cup $((lin + 3)) $UltCol; echo $UltLin
let c++
k=1
# Pendurando as bolas (da árvore, claro!)
while true
do
for ((i=1; i<=35; i++))
{
# Apagando a bola que foi ligada há 35 rodadas atras
[ $k -gt 1 ] && {
tput setab 0; tput setaf 2; tput bold
tput cup ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]}; echo \*
MontaArr ${linha[$[k-1]$i]} ${coluna[$[k-1]$i]} \* 2
unset linha[$[k-1]$i]; unset coluna[$[k-1]$i] # Mantenha limpo o vetor
}
li=$((RANDOM % 9 + 3))
ini=$((c-li+2))
fim=$((c+li+2))
co=$((RANDOM % (li-2) * 2 + 1 + ini))
tput setab 0; tput setaf $cor; tput bold # Troca cor das bolas
tput cup $li $co
echo o
linha[$k$i]=$li
coluna[$k$i]=$co
MontaArr $li $co o $cor
sh=1
for l in S H E L L
do
tput cup $((lin+1)) $((c-3+sh))
echo $l
let sh++
done
# Olha a neve
for ((n=0; n<15; n++))
{
[ "${nev[n]}" ] || {
nev[n]=$[RANDOM % 12 + 1]$(printf "%02i" $[RANDOM % 25 + ccnev])
}
lnev=$[nev[n] / 100]
cnev=$[nev[n] % 100]
idx=$lnev$(printf "%02i" $cnev)
Antigo=${Arr[10#$idx-100]%:*}
Antigo=${Antigo:-' '}
CorAnt=${Arr[10#$idx-100]#*:}
CorAnt=${CorAnt:-0}
tput setab 0
tput setaf $CorAnt
tput cup $[lnev-1] $[cnev-1]
echo "$Antigo"
tput setab 0; tput setaf 7; tput cup $lnev $[cnev-1]; echo .
let lnev++
nev[n]=$lnev$(printf "%02i" $cnev)
[ $lnev -gt 16 ] && {
tput setab 0; tput setaf 7; tput cup $[lnev-1]
$[cnev-1]; echo " "
unset nev[n]
}
tput setaf $[n%7+1]
tput cup $[LinLogo+LogoTrab] $ColLogo
echo "${Nome:$[LogoTrab*3]:3}"
(( LogoTrab++ == Pos-1)) && {
LogoTrab=0
}
}
cor=$(((cor+1)%8))
}
k=$((k % 2 + 1))
done
​Feliz Natal
,
Julio
*
​
Damos treinamento em sua empresa por **um preço,
no mínimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
​​
Nosso time de instrutores /in company/ é formado somente por
​
​
autores
​ ​
​
de /Best Sellers
​ ​
/Shell/ básico e Programação em /Shell/Julio Neves
/Bacula/Heitor Medrado
/Zabbix/Adail Host
Falae pessoal,
Bem, estou criando um script para contagem de tempo fazendo uso
do tput. A ideia é que o script mostrasse a mensagem de tempo no
final da tela (rodando em background), mas que pudesse liberar o
shell na parte de cima para que o usuário pudesse fazer outras
coisas e quando a contagem encerrar, finalizaria com outra
mensagem de fim. Sei que é possível dividir a tela com o tput, mas
não sei como fazer. Há alguma forma de liberar o shell para o
usuário, enquanto a mensagem é mostrada no final da tela? Ou seja,
limitaríamos uma pequena parte da tela para a mostragem das
mensagens, enquanto a parte de cima do shell ficaria liberada para
#!/bin/sh
LIN="`tput lines`"
COL=0
TEMPO=5
flag="0"
while [ "$flag" -eq "0" ]
do
tput ed
tput cup $LIN 0
echo "TEMPO RESTANTE: \c "
tput cup $LIN 22; echo "$TEMPO\c"
TEMPO=$(($TEMPO-1))
if [ $TEMPO -lt 0 ]
then
sleep 1
tput ed
tput cup $LIN 0
echo "O TEMPO ACABOU\c"
tput ed
flag="1"
fi
sleep 1
done &
Abraço a todos,
Junior.
Continue reading on narkive:
Loading...