você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Script para ficar rico

Por Rubens Queiroz de Almeida

Data de Publicação: 03 de Novembro de 2006

Sempre que somos chamados a participar de um bolão, quando a loto acumula, temos que enviar alguns números para montar os cartões

Este script cria, aleatoriamente, uma sequencia de 10 conjuntos de seis números, e pode ajudar a vencer os bloqueios criativos para montar tantos cartões em pouco tempo.

O segredo do script, a geração de números aleatórios, é obtida através do programa perl:

perl -e "print int(rand($lastnum+1))+$firstnum;"`

Nós invocamos a função rand do perl, passando-lhe dois argumentos: o primeiro número da sequencia (firstnum) e o último número (lastnum).

A função rand do perl, gera um número ENTRE 0 e um valor que lhe passamos como argumento. Note que na expressão $lastnum+1 passada à função rand, nós somamos mais um, visto que a função rand gera números ENTRE os limites que lhe passamos. Como nós desejamos gerar números aleatórios entre um intervalo, ao resultado gerado pela função rand, nós temos que somar o valor do primeiro número da faixa:

Adicionalmente, como eu estou interessado apenas em números inteiros, eu precedi a chamada da função rand com a diretiva int.

rand($lastnum+1))+$firstnum;

Resumindo, para o script da loteca, eu preciso de números entre 1 e 60, que são os valores possíveis.

A explicação sobre o restante do script eu incluo como comentário no próprio código.

Boa sorte :-)

#!/bin/bash

# Definição da faixa de valores para a geração
# dos números aleatórios. Esta faixa de valores
# vai de 1 até 60

firstnum=1
lastnum=60

var0=0
cartoes=10

# Todo script CGI precisa começar com uma linha
# indicando o tipo de arquivo, em nosso caso,
# html A diretiva echo vazia é usada apenas para
# criar uma linha em branco, também obrigatória
# O cabeçalho montado é bastante simples, mas
# poderiamos aqui montar qualquer tipo de cabeçalho
# html que desejarmos

echo "Content-type:text/html";
echo

echo "<HTML><BODY><TITLE>Loteca</TITLE>";

# Montamos aqui a tabela, que irá conter os números gerados

echo "<TABLE ALIGN=CENTER>";

# Temos aqui dois laços, um que controla o número
# de cartões  a serem gerados, controlado pela
# variável var0, cujo valor se inicia em 0 e vai
# sendo aumentado em uma unidade a cada execução do
# laço. A montagem do cartão em si é controlada
# pelo segundo laço, através da variação das
# variáveis i e j

while [ "$var0" -lt "$cartoes" ]
 do
  echo "<TR>"
  i=0
  j=6
   while [ "$i" -lt "$j" ]
    do
     Random=`perl -e "print int(rand($lastnum+1))+$firstnum;"`
     echo -n "<TD ALIGN=RIGHT>$Random</TD>"
     i=`expr $i + 1`
    done
  echo
  var0=`expr $var0 + 1`
  echo "</TR>"
 done

echo "</TR>"
echo "</TABLE>"
echo "</HTML></BODY>"

Eu uso estes mesmos conceitos para diversas outras finalidades. Nos sites Contando Histórias e Aprendendo Inglês eu uso scripts baseados nesta técnica, que selecionam, a partir do conteúdo já existente nos sites, uma das mensagens. Este script é acessado, nos dois sites, em um link chamado Mensagem Aleatória, que se encontra na barra de navegação no lado esquerdo. Na semana que vem eu comentarei sobre esta nova forma de uso desta técnica.

Existem diversas outras possibilidades para geração de números aleatórios em shell scripts. Caso você conheça outras formas de realizar esta tarefa, sinta-se a vontade para usar o campo de comentários.

Como comentário final, gostaria de chamar a atenção de que este script possui uma falha óbvia. Ele não controla a existência de números duplicados em um mesmo cartão. Fica aqui então a sugestão para os leitores para uma possível melhoria.

Se você quiser tentar a sorte, pode usar o script, bem aqui no site da Dicas-L.

Boa sorte :-)

Error: No site found with the domain 'moodle.idph.com.br' (Learn more)