親ディレクトリの下のすべてのディレクトリの検索に費やす時間を最小限に抑え、いくつかのファイル内のいくつかのものを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
スクリプトは、ファイルの下の文字列をgrepしてからhis_file
ダンプすることsst-logs.out
になっています。私の問題は、if
ステートメントの一部です。スクリプトは、現在のディレクトリで をチェックし、存在する場合はsysconfig.out
grepしてdrive model
ダンプします。sst-logs.out
存在しない場合は、ディレクトリを に変更してからnode0
grepphysical memory size
からsetupsys.out
にダンプしsst-logs.out
ます。私の問題は、if then else
データをまったくダンプしないため、ステートメントが機能していないように見えることですが、手動で grep を実行すると、データがあります。
シェル スクリプトの何が問題になっていますか? これを行うためのより効率的な方法はありますか?