elgio
(usa OpenSuSE)
Enviado em 16/06/2008 - 14:34h
O Lincoln!
me permite criticar o teu script? Acho que pude melhora-lo pra ti. Primeiro, deixe-me comentar o que vi de errado no intuito que te aprofundes mais em shell script, OK?
#!/bin/sh
Eu usaria /bin/bash. sh pode dar problemas.
tmax=110; #tamanho em bytes
#grava o tamanho num arquivo
tarqu="`du /home/lincoln/teste/1.jpg > tam`";
tam="`cut -c 1-3 tam`"; #obtem tamanho do arquivo
As etapas acima podem ser feitas direto na memória, sem envolver arquivo. Ainda, está equivocado! O du, por padrão, retorna o tamanho em blocos de 512!!! Um arquivo de 600 bytes vai retornar 1 para o du acima!! Um de 2000 bytes vai retornar 3 (porquq 4 seriam 2048 bytes).
É possível alterar o du para retornar em BYTES com o comando du -b
O teu cut também te afundará, pois ele está pegando apenas as colunas 1 a 3. E se o arquivo for maior que 999 bytes??
Outro problema é que se o arquivo NAO EXISTIR, o du ira gerar erro na saida de erro e nao na saida padrao. Como efeito tu teras NADA para a variavel tam o que ira gerar ERRO DE SINTAXE no teu if abaixo.
if [ $tam -gt $tmax ];
then
echo "O arquivo é maior que 110 b " ;
else
echo "O arquivo é menor que 110 b " ;
fi
Enfim, fiz este pra ti. Para poder testar, fiz com que o nome do arquivo pudesse ser parametro:
./contador /home/lixo.txt
Usei o stat ao inves do du, porque assim ja se elimina a necessidade do cut (e teria que altera-lo!!)
Como tudo que tenho publicado no VOL, coloquei este script para download no meu site:
http://gravatai.ulbra.tche.br/~elgio/disciplinas/?DISC=OUTRAS&MAT=VOL
Segue:
#!/bin/bash
TMAX=110 #tamanho em bytes
ARQ="/home/lincoln/teste/1.jpg"
# pode receber nome do arquivo como argumento
if [ "X" != "X$*" ]
then
ARQ=$1
fi
# Coloca em TAM o tamanho do arquivo em BYTES ou ZERO se nao existe
# Havia um serio problema com o teu du
# 1) ele retorna em Kbytes e nao em bytes
# 2) necessario um cut e o teu pegava apenas coluna 1 e 3
# e se o arquivo fosse maior que 999 bytes???
TAM="`stat -c "%s" $ARQ 2>/dev/null || echo "0"`"
if [ $TAM -gt $TMAX ]
then
echo "O arquivo $ARQ eh maior que $TMAX b " ;
else
echo "O arquivo $ARQ eh menor que $TMAX b " ;
fi