2016-06-13 4 views
0

Ich habe ein Bash-Skript erstellt, das über eine Crontab läuft, die die installierte Version von nmap auf einem Linux-Host überprüft. Das Problem ist, dass aus irgendeinem Grund, wird die Prüfung nicht richtig funktioniert und es versucht, immer nmap wieder zu installieren und wieder ...Überprüfen Sie die Version des Programms und so etwas in Bash

#!/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 

Wenn ich überprüfen, um zu sehen, ob der Auftrag ausgeführt wird (was es sollte einmal, aber nie wieder, da die Version sollte das zweite Mal passen), ist es ...

$> 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 

Ausführen der Kontrolle über die Befehlszeile Ausbeuten (ohne -q):

$> nmap --version | grep "7.12" 
Nmap version 7.12 (https://nmap.org) 

Was ist verkorkste mit mein scri pt?

Antwort

3

ShellCheck sagt:

Line 2: 
if ! $(nmap --version | grep -q "7.12"); then 
    ^-- SC2091: Remove surrounding $() to avoid executing output. 

Der richtige Weg, dies zu tun, ist nur:

if ! nmap --version | grep -q "7.12"; then 

Ihr Versuch, findet die Zeichenfolge Nmap version 7.12 (https://nmap.org), und wegen der $(..) es versucht dann zu laufen, dass als Befehl. Dies führt zu einem Fehler, die Sie wahrscheinlich in der Frage angemeldet haben und enthalten sollte:

Nmap: command not found 

Da Fehler falsch sind, die ! macht es wahr, und Ihr Code ausgeführt wird jedes Mal.

Verwandte Themen