De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 23 de agosto de 2017
A dica de hoje é um script bash muito interessante, desenvolvido pelo Júlio Cezar Neves. É um relógio digital, que deve ser chamado passando a linha e a coluna do seu canto superior esquerdo.
A função DrawBox
desenha uma caixa, mas precisa que seja passada a linha e
coluna do vértice superior esquerdo, altura (em linhas) e largura (em colunas).
Logo no início ele testa se os parâmetros estão vindo por pipe ou por passagem. Isso é raro de se ver em Shell.
Uma excelente aula de bash :-)
#!/bin/bash # Faz um relógio digital com a hora do sistema #+ recebendo linha inicial e coluna inicial function DrawBox { # 1o. parâmetro: Linha # 2o. parâmetro: Coluna # 3o. parâmetro: Altura # 4o. parâmetro: Largura local i local Largura=$4 printf -v Linha "%${Largura}s" ' ' # Cria $Largura espaços em $Linha printf -v Traco "\e(0\x71\e(B" # Põe um traço semigráfico em $Traco tput cup $1 $2; printf "\e(0\x6c\e(B" # Canto superior esquerdo echo -n ${Linha// /$Traco} # Troca todos os espaços de $Linha por $Traco printf "\e(0\x6b\e(B\n" # Canto superior direito for ((i=1; i<=$3; i++)) # Construindo altura do tput cup $(($1+i)) $2 printf "\e(0\x78\e(B" # Barra vertical esquerda printf %${Largura}s"\e(0\x78\e(B\n" # Barra vertical direita done printf -v linha "%${Largura}s" ' ' printf -v traco "\e(0\x71\e(B" tput cup $(($1+i)) $2; printf "\e(0\x6d\e(B" echo -n ${Linha// /$Traco} # Troca todos os espaços de $Linha por $Traco printf "\e(0\x6a\e(B\n" }; export -f DrawBox function Uso { echo " Uso: $0 Linha Coluna ou echo Linha Coluna | $0 Onde Linha e Coluna definem o vértice superior esquerdo do relógio" }; export -n Uso if [[ -t 0 ]] # Testa se o dado não está em stdin then (($#)) || { # Testa se tem parâmetro Uso exit 1 } Parms="$@" else Parms=$(cat -) # Seta parâmetros com conteúdo de stdin fi set $Parms (( $# == 2 )) || { Uso exit 1 } Num[0]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x78\e(B \e(0\x78\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[1]=' \e(0\x6b\e(B ^ \e(0\x78\e(B ^ \e(0\x76\e(B ' Num[2]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6a\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[3]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^ \e(0\x71\e(B\e(0\x75\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[4]='\e(0\x77\e(B \e(0\x77\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x75\e(B^ \e(0\x76\e(B' Num[5]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x71\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[6]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x74\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[7]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^ \e(0\x78\e(B^ \e(0\x76\e(B' Num[8]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x74\e(B\e(0\x71\e(B\e(0\x75\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Num[9]='\e(0\x6c\e(B\e(0\x71\e(B\e(0\x6b\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x75\e(B^\e(0\x6d\e(B\e(0\x71\e(B\e(0\x6a\e(B' Lin=$1 DrawBox $Lin $2 3 25 tput cup $((Lin+2)) $(($2+9)); echo ? tput cup $((Lin+3)) $(($2+9)); echo ? tput cup $((Lin+2)) $(($2+17)); echo ? tput cup $((Lin+3)) $(($2+17)); echo ? while true do HrAtu=$(date +%H%M%S) for ((i=0; i<=5; i++)) { for ((j=1; j<=3; j++)) { tput cup $((Lin+j)) $(($2+2+i*4)) echo -e "$(cut -f$j -d^ <<< "${Num[${HrAtu:i:1}]}")" } } tput cnorm sleep 1 tput civis done
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários