Sorteio
Este script nasceu no segundo ENCASOFT (Encontro Capixaba de Software Livre), realizado em Colatina-ES. Na ocasião estava assistindo a uma palestra, enquanto preparava um Script Shell para realizar o sorteio entre os nomes dos inscritos no encontro. Os nomes sorteados eram presenteados com brindes fornecidos pelos colaboradores do encontro.
A primeiro versão era bem simples, mas foi ganhando algumas implementações para deixar o sorteio mais interessante e funcional. As funcionalidades dos script são:
- Realiza vários sorteios antes de apresentar o resultado final. A idéia é deixar o resultado mais aleatório possível. Para um dado número de interações ($1), é gerado aleatóriamente, o número de sorteios (NINTER). Cada resultado será sorteado NINTER vezes antes de apresentar o sorteado final.
- A apresentação foi incrementada com algumas cores e apresentação de resultados intermediários, que geram a impressão de uma roleta de nomes passando pela tela. A emoção!
- A lista de nomes dos inscritos é passada como o parâmetro de entrada no script $2;
- O nome do patrocinador do evento, que está oferecendo o brinde é apresentado durante o sorteio.
Para o uso do script é necessário passar três variáveis:
- $1 – número máximo de interações;
- $2 – lista de nomes dos inscritos para o sorteio, em ascii;
- $3 – nome da empresa patrocinadora.
O echo -e “\033[…”
Aproveitando, vou falar um pouco dos caracteres de controle utilizados neste script. Estes caracteres de controle são importantes para se gerar saídas personalizadas em seus programas, com posicionamento de cursor, cores e outras ações.
Uma forma bem eficiente de inserir caracteres de controle em um script é utilizar o comento echo -e e passar a forma octal do espace (\033).
Os caracteres de controle utilizados neste script são apresentados na tabela abaixo:
| Caracter de controle | Descrição |
|---|---|
| \033[m | cor do texto normal |
| \033[1;31m | cor do texto vermelho |
| \033[1;32m | cor do texto verde |
| \033[1;34m | cor do texto azul |
| \033[0K | apaga do cursor até o fim da linha |
| \033[2A | move o cursor duas linhas para cima, sem mudar de coluna |
Para conhecer todos os códigos de cores, experimente o comando abaixo:
$ for i in `seq 0 7`; do \
for j in `seq 0 7`; do \
for k in ";1" ""; do \
texto="4${j};3${i}${k}"; \
echo -en "\033[${texto}m $texto \033[m"; \
done; \
done; \
echo;
done
Maximize o console para ver melhor os códigos.
O Aurélio possui um artigo bem interessante, que apresenta, senão todos, muitos dos caracteres de controle do Shell. Veja o texto neste link
O script sorteio
O script do sorteio está apresentado abaixo.
#!/bin/bash
# Feito por Rudson R. Alves
# para o Encasoft 1.2 - VV
# 23/10/2006
#
# Entrada:
# $1 número máximo de intereções, menor que 32767
# $2 lista de nomes
# $3 Nome da empresa patrocinante
#
# Help
if [ $# -ne 3 ]; then
echo -e "Use: sorteio [N máx de interações] [lista de nomes] [nome da empresa]"
exit
fi
# Nome do Evento
EVENT="ENCASOFT 2.0"
# Número máximo de colunas
NCOLUNS=$(( $( tput cols ) - 3 ))
# Número de linhas do texto
NLINES=$( cat $2 | wc -l )
# Sorteio em loop
while [ "$ANS" != "q" ]; do
# Número de Interações
NINTER=$(( $RANDOM % $1 +1 ))
# Limpa a tela para o seoteio
clear
# Apaga o cursor
tput civis
# Imprime cabeçalho
echo -e "\033[1;34m$EVENT\n \033[1;32mSorteio \033[4;36m$3\033[m"
echo -e "\033[1;32mInscritos: \033[1;34m$NLINES\033[1;32m Interações: \033[1;34m$NINTER\033[1;31m"
for i in $( seq 0 $NINTER ); do
# Sorteia a linha
LINE=$(( $RANDOM % $NLINES + 1 ))
# Pega a linha do texto
NAME="$( eval "sed -r '$LINE! d'" $2 )"
# Apresenta o conteúdo
echo -e "\033[0K ${NAME:0:$NCOLUNS}"
# Posiciona o cursor duas linhas acima
echo -e "\033[2A"
done
echo -e "\n\033[m"
# Acende o cursor
tput cnorm
# Ler teclado: "q" para fim
read ANS
done
Deixe uma resposta