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