contadores em shell-script - dicas e exemplos

Atualizado em: 23/07/2006



Sobre este documento

Exemplos de contadores em linha de comando e scripts, contar linhas, registros, palavaras e etc.

let incrementar de um e um

let = Contador para implementar de um em um use neste formato

let I++

++ efetua adição de 1, na primeira execução define I=1, na segunda adiciona 1 e assim por diante.

let I-- subtração, cada vez que executar diminue 1.

Veja a sequencia de comandos e o retorno.

  let I++
  echo $I
  1
  let I++
  echo $I
  2
  let I++
  echo $I
  3
  let I--
  echo $I
  2
  let I--
  echo $I
  1
  let I--
  echo $I
  0
  let I--
  echo $I
  -1
  let I--
  echo $I
  -2

wc contar linhas, palavras e bytes

do man do wc

  -c, --bytes
         print the byte counts
  
  -m, --chars
         print the character counts
  
  -l, --lines
         print the newline counts
  
  -w, --words
         print the word counts
  

Alguns exemplos e resultados.

Acrescente no final da linha de comando um pipe | mais wc opção.

echo "contar as palavras" | wc -w

retorna 3 que é o numero de palavras.

contar byte ou caracteres

  echo "contar byte ou caracteres" | wc -c
  26
  
  echo -n "contar byte ou caracteres" | wc -c
  25

Observe que o resultado muda com (echo -n), não enviar o final de linha, veja o man echo

-n do not output the trailing newline

Ou seja, -n serve para echo não colocar o \n no final da linha, na contagem de bytes o final de linha também é considerado como um byte ou caractere.

Contar as palavras de um arquivo.

cat arq.txt | wc -w

contar as linhas de um arquivo.

cat arq.txt | wc -l

Contar o numero de ocorrencias no log, neste exemplo, contar nos ultimos 1000 registros no log do apache, quantas linhas tem a palavra samba

tail -1000 /var/log/apache2/access_log | grep samba | wc -l

Contar linhas de todos arquivos do diretório corrente

wc -l *

Contar linhas somente dos arquivos .txt

wc -l *.txt

Contar linhas de arquvo especifico.

wc -l < arquivo.txt

wc -l arquivo.txt

com awk e outros exemplos

echo "contar byte ou caracteres" | awk '{print length($0)};'

  qtbytes=`echo "contar byte ou caracteres"`
  echo ${#qtbytes}
  25

contador em loop while

Inserindo um contador e (break) para encerrar e sair do while depois de n vezes.

  #!/bin/bash
  contador=1
  while true ; do
    echo "isto é um teste"
    sleep 2
    contador=$(($contador+1))
    # ou comente a linha acima e remova o comentario da proxima linha
    #contador=`expr $contador + 1`
    if [ $contador -gt 5 ]; then
    echo "while encerrado, executou 5 vezes "
    break
    exit 1
  fi
  done

Usei a variável contador para facilitar o entendimento, simplifique por outra qualquer, como exemplo com a letra "i" no exemplo abaixo.

#!/bin/bash i=1 while true ; do echo "isto é um teste" sleep 2 i=$[$i+1] if [ $i -gt 5 ]; then echo "while encerrado, executou 5 vezes " break exit 1 fi done

Indicações

Página principal sobre script em geral (FAQ)
http://www.zago.eti.br/script/A-menu-scripts.html

Página principal deste site (FAQ)
http://www.zago.eti.br/menu.html