
私は親ディレクトリの下のすべてのディレクトリを検索し、いくつかのファイルの内容を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
との間のスペースに注意してください]
。