Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Grupo MBS

 

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 :-)

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato Imprimir
  • Currently 3.11/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (282 votos)

Opinião dos Leitores

Adolfo Alves Pereira
12 Fev 2010, 14:59
Caro Amigo

Gostaria de receber uma orientação como criar um script para gerar uma série de numeros desta forma.

1 - 1.2.3.4.5.6
2 - 1.2.3.4.5.7
3 - 1.2.3.4.5.8
4 - 1.2.3.4.5.9
5 - 1.2.3.4.5.10 e assim sucessivamente até 60, preciso de cartões com sequência, e depois eliminar sequência de 5 numeros seguidos, quatro numeros. Se possível mandar o executável deste programa para e eu aprender está lógica.

Adolfo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Artigos Publicados


Linux Shell Script em Newsgroup

Servidor: news.gmane.org

Grupo: gmane.org.user-groups.programming.shell.brazil


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.