我创建了一个bash脚本,该脚本通过crontab运行,该脚本检查linux主机上已安装的nmap版本。问题是,由于某种原因,检查工作不正常,并且总是试图一次又一次地安装nmap ...
#!/bin/sh
if ! $(nmap --version | grep -q "7.12"); then
wget https://nmap.org/dist/nmap-7.12.tar.bz2 -P /tmp/
cd /tmp && bzip2 -cd nmap-7.12.tar.bz2 | tar xvf -
cd nmap-7.12
./configure --without-zenmap
make
make install
cd ..
rm nmap-7.12.tar.bz2
rm -rf nmap-7.12
reboot
fi
如果我检查作业是否正在运行(它应该运行一次,但由于版本应该与第二次匹配而再也没有),那就是......
$> ps aux | grep nmap
root 27696 15.4 0.3 2940 1464 ? R 16:31 0:00 /bin/bash ./configure --disable-option-checking --prefix=/usr/local --without-zenmap --cache-file=/dev/null --srcdir=. --no-create --no-recursion
从命令行运行检查产生(不带-q):
$> nmap --version | grep "7.12"
Nmap version 7.12 ( https://nmap.org )
我的剧本搞砸了什么?
答案 0 :(得分:3)
Line 2:
if ! $(nmap --version | grep -q "7.12"); then
^-- SC2091: Remove surrounding $() to avoid executing output.
正确的方法是:
if ! nmap --version | grep -q "7.12"; then
您的尝试找到字符串Nmap version 7.12 ( https://nmap.org )
,并且由于$(..)
,它会尝试将其作为命令运行。这会导致您可能应记录并包含在问题中的错误:
Nmap: command not found
由于错误是错误的,!
使其成立,并且您的代码每次都会运行。