você está aqui: Home → Colunistas → Cantinho do Shell
Por Rubens Queiroz de Almeida
Data de Publicação: 14 de Fevereiro de 2007
Em dos sites que mantenho, chamado Contando Histórias, eu criei uma página onde relaciono todo o conteúdo do site. Esta página é gerada através de um shell script que conta o número de mensagens existentes, divide este número por dois, e monta uma tabela com duas colunas. Para entender melhor o que é feito, nada melhor do que visitar a página de arquivo do site.
Vamos então ao script e à explicação de seu funcionamento.
#!/bin/bash homedir=/html/contandohistorias cd $homedir/html # O laço que se segue trabalha # sobre todos os arquivos do diretório # /html/contandohistorias/inc que # tenham a terminação "inc". Estes são arquivos # no formato html, gerados pelo software txt2tags # (txt2tags.sourceforge.net). for file in *.inc do # O arquivo php final é formado a partir do nome do # arquivo terminado em "inc". Este nome é atribuído # à variável $php, definida no próximo comando php=`echo $file | sed 's/inc/php/'` # No arquivo html a primeira linha contém o título # da mensagem, formatada como título de nível 1 # (H1). O título é extraído desta linha com o # comando sed e em seguida convertido em uma # referência html, para ser usada mais tarde na # montagem do arquivo geral. sed -n 1p $file | sed 's:<H1>::;s:</H1>:</A>:' | sed "s:^:<BR><A HREF=/historias/$php>:" >> /tmp/idx.tmp # Usamos o comando tac para inverter a ordem das # mensagens, deixando as mais recentes em primeiro # lugar na listagem. tac /tmp/idx.tmp > /tmp/idx.$$ && mv /tmp/idx.$$ /tmp/idx.tmp done cp /tmp/idx.tmp $homedir/inc/listagem.inc # Fazemos a seguir a contagem de linhas do arquivo # idx.tmp, que representa o total de mensagens já # enviadas. A variável $half é obtida dividindo # por 2 o número total de linhas do arquivo lines=`wc -l /tmp/idx.tmp | awk '{print $1}'` half=`expr $lines / 2` # Usamos agora o comando split para partir o # arquivo em dois. A diretiva "-l" sinaliza que # a divisão do arquivo deve ser feita levando-se # em conta o número de linhas (lines). split -l $half /tmp/idx.tmp # o comando split gera dois arquivos "xaa" e # "xbb". Estes dois arquivos formarão as duas # colunas da tabela. mv xaa $homedir/inc/coluna1.inc mv xab $homedir/inc/coluna2.inc # A seguir, fazemos a construção do arquivo # php final, através da inclusão dos diversos # elementos da página: cabeçalho (Head.inc), barra # de navegação (navbar.inc), barra da esquerda # (esquerda.inc), e as duas colunas da tabela # (coluna1.inc e coluna2.inc). echo "<?PHP include(\"/html/contandohistorias/inc/Head.inc\"); ?> <div id=top> <H1>Contando Histórias</H1> <?PHP include(\"/html/contandohistorias/inc/navbar.inc\"); ?> </div> <div id=mainleft> <?PHP include(\"/html/contandohistorias/inc/esquerda.inc\"); ?> </div> <div id=maincenter> <h1>Arquivo Lista Contando Histórias</h1> <table> <tr valign=top> <td> <?PHP include(\"/html/contandohistorias/inc/coluna1.inc\"); ?> </td> <td> <?PHP include(\"/html/contandohistorias/inc/coluna2.inc\"); ?> </td> </tr> </table> </html> </body>" > $homedir/arquivo.php rm /tmp/idx.*