if [ -r "$dir"/sysconfig.out ];
Observe o espaço em branco entre t
e ]
.
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?
Tags shell scripting shell-script