次のスクリプトが実行されていますが、結果について詳しく知りたいです。サービス状態のほかにrtvscand
ファイルがある場所も追加したいと思います。たとえば、Symantecファイルは/ appディレクトリにあり、Symantecファイルは/ optディレクトリにあります。
# cat /app/scripts/symantec_scripts/symantec.sh
for i in `cat /app/scripts/symantec_scripts/list`
do ssh root@$i "uname -n
if [ -s /app/Symantec/virusdefs/definfo.dat ]; then
cat /app/Symantec/virusdefs/definfo.dat
else
cat /opt/Symantec/virusdefs/definfo.dat
fi
echo `service rtvscand status`
echo ....................................................................." ; done | tee /tmp/symantec_info.`date +"%m%d%y"`
答え1
下記の他の(より良い)回答をご覧ください
loc
if ステートメントに変数を追加します。
# cat /app/scripts/symantec_scripts/symantec.sh
for i in `cat /app/scripts/symantec_scripts/list`
do ssh root@$i "uname -n
if [ -s /app/Symantec/virusdefs/definfo.dat ]; then
loc='/app'
cat /app/Symantec/virusdefs/definfo.dat
else
loc='/opt'
cat /opt/Symantec/virusdefs/definfo.dat
fi
echo `service rtvscand status`
echo Location is $loc/Symantec/virusdefs/definfo.dat
echo ....................................................................." ; done | tee /tmp/symantec_info.`date +"%m%d%y"`
編集内容は、印刷位置の周りの二重引用符loc="string"
に変更および削除されました。loc='string'
echo
答え2
さて、何らかの理由で変数を使って場所を保存することはうまくいきません。全体的に、より良いアプローチは、find
単にシマンテックがある場所を見つけ、cat
問題なくフルパスをエコーすることです。
for i in `cat /app/scripts/symantec_scripts/list`
do ssh root@$i "uname -n
cat $(find / -maxdepth 2 -name Symantec)/virusdefs/definfo.dat
echo Location is $(find / -maxdepth 2 -name Symantec)/virusdefs/definfo.dat
echo ....................................................................."
done | tee /tmp/symantec_info.`date +"%m%d%y"`
$(command)
デフォルトでは、コマンドはシェルのように実行され、出力に置き換えられるため、検索$(find / -maxdepth 2 -name Symantec)
で始まり、/
2つのディレクトリだけが深く移動し、Symantecという名前を見つけて出力します。この出力は、完全な$(command)ステートメントの代わりに使用されます。
あなたの場合、ステートメント全体は$(find...)
次の結果を出力する必要があります/app/Symantec
。/opt/Symantec
if
これにより、長い説明を避け、他の場所にいる場合はシマンテックを見つけることができるという利点があります。
唯一の欠点は、何らかの理由でルートディレクトリとその上のディレクトリに複数のSymantecというディレクトリがあることです/
。これは問題を引き起こす可能性があります。