以下脚本正在运行,我想了解更多关于结果的信息。除了服务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)
将像在 shell 中一样执行命令,并将其替换为输出,因此$(find / -maxdepth 2 -name Symantec)
从 开始查找/
,仅深入 2 个目录,查找名为 Symantec 的任何内容,然后输出它。此输出只是用来代替整个 $(command) 语句。
您的情况下的整个$(find...)
语句应该输出类似/app/Symantec
或/opt/Symantec
这还有一个额外的好处,可以避免冗长的if
声明,并在赛门铁克碰巧在其他地方时找到它。
唯一的缺点是,如果由于某种原因,您的直接根目录和任何上一层目录中有多个名为 Symantec 的目录/
。这会引起问题。