Script para recolher dados recursivamente de certos arquivos no diretório

1

Estou fazendo um script de shell simples que minimiza o tempo gasto na pesquisa de todos os diretórios em um diretório pai e grep algumas coisas dentro de alguns arquivos. Aqui está meu script.

#!/bin/sh
MainDir=/var/opt/database/1227-1239/

cd "$MainDir"

for dir in $(ls); do

grep -i "STAGE,te_start_seq Starting" "$dir"/his_file | tail -1 >> /home/xtee/sst-logs.out

if [ -f "$dir"/sysconfig.out];
then
    grep -A 1 "Drive Model" "$dir"/sysconfig.out | tail -1 >> /home/xtee/sst-logs.out
else
    grep -m 1 "Physical memory size" "$dir"/node0/setupsys.out | tail -1 >> /home/xtee/sst-logs.out
fi

done

O script deve colocar a string STAGE,te_start_seq Starting sob o arquivo his_file e depois copiá-la sst-logs.out . Meu problema, porém, é a parte na instrução if . O script deve verificar o diretório atual para sysconfig.out , grep drive model e descarregar para sst-logs.out , se existir, caso contrário, altere o diretório para node0 , em seguida, grep physical memory size de setupsys.out e copie-o para sst-logs.out . Meu problema é, parece que a instrução if then else parece não funcionar, já que não despeja nenhum dado, mas se eu executar o grep manualmente, eu tenho dados.

O que há de errado com meu script de shell? Existe alguma maneira mais eficiente de fazer isso?

    
por Jude 28.09.2012 / 04:47

1 resposta

0

Existe pelo menos um erro de sintaxe; você está perdendo um espaço antes do ] da instrução if. A linha deve ser

if [ -f "$dir"/sysconfig.out ] ;

É estranho que o seu script não relate isso. Você corre do cron? Antes de iniciar seu script automaticamente, primeiro certifique-se de que ele funcione corretamente. Adicione echo declarações para depurar seu programa:

if [ -f "$dir/sysconfig.out" ] ; then
  echo "$dir/sysconfig.out present"
  echo running grep -A 1 "Drive Model" "$dir"/sysconfig.out
  grep -A 1 "Drive Model" "$dir"/sysconfig.out | tail -1 >> /home/xtee/sst-logs.out
else
  echo "$dir/sysconfig.out absent"
  echo running rep -m 1 "Physical memory size" "$dir"/node0/setupsys.out
  grep -m 1 "Physical memory size" "$dir"/node0/setupsys.out | tail -1 >> /home/xtee/sst-logs.out
fi
    
por January 28.09.2012 / 09:26