나는 상위 디렉토리 아래의 모든 디렉토리를 검색하고 일부 파일의 내용을 grep하는 데 걸리는 시간을 최소화하는 간단한 쉘 스크립트를 만들고 있습니다. 이것은 내 스크립트입니다.
#!/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
이 스크립트는 STAGE,te_start_seq Starting
파일 아래의 문자열을 파악한 his_file
다음 덤프 해야 합니다 sst-logs.out
. 하지만 내 문제는 진술 부분에 있습니다 if
. 스크립트는 현재 디렉토리를 확인하고 sysconfig.out
, grep drive model
from을 확인하고 존재하는 경우 이를 덤프해야 합니다 sst-logs.out
. 그렇지 않으면 디렉토리를 node0
grep physical memory size
from으로 변경 setupsys.out
하고 로 덤프해야 합니다 sst-logs.out
. 내 문제는 이 if then else
명령문이 데이터를 전혀 덤프하지 않기 때문에 작동하지 않는 것 같지만 수동으로 grep을 수행하면 데이터가 있다는 것입니다.
내 쉘 스크립트에 어떤 문제가 있습니까? 이를 수행하는 더 효율적인 방법이 있습니까?
답변1
if [ -r "$dir"/sysconfig.out ];
t
와 사이의 공백에 유의하십시오 ]
.