使用信息回显目录

使用信息回显目录

以下脚本正在运行,我想了解更多关于结果的信息。除了服务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 的目录/。这会引起问题。

相关内容