Ich habe ein einfaches Skript, das aus einer Liste von IP-Adressen nmaps, und gibt alle ips, die Port 80 geöffnet haben. Das Problem ist, wenn 80 geschlossen ist, und keine Rückkehr, ich bekomme "=: Befehl nicht gefunden", da es versucht, eine leere/leere Variable zu vergleichen.Bash Vergleiche mit leeren Variablen in einfachen nmap Skript
#!/bin/bash
for i in$(cat filename.txt); do
str=$(nmap $i |grep 80 | cut -d ' ' -f2)
if($str = "open"); then
echo port 80 on $i is open
fi
done
Wenn Port 80 geschlossen ist, wird $ str nichts für einen Wert bekommen, dann, wenn ich versuche, nichts mit dem String „offen“ zu vergleichen, im immer „=: Befehl nicht gefunden“. Wie überprüfe ich, ob $ str einen Wert hat, bevor es mit einem String verglichen wird? Ich habe versucht,
if (! -z $str); then
die ich dachte,
bedeuteteif $str is not null, then,
aber konnte es nicht richtig funktioniert. Ich glaube sicherlich, ich verstehe, warum es sich so verhält, wie es ist, ich weiß einfach nicht, wie ich es korrigieren soll.
Ihnen bewusst, dass der Testbefehl nicht '(' in der Schale ist? Sind Sie sich bewusst, dass weiße Raum Angelegenheiten und 'in $ (cat)' nicht funktionieren? Und weder 'if ('. – Jens
Ich schlage vor, 'if ($ str =" open ");' durch 'if [[$ str =" open "]];'. – Cyrus
zu ersetzen. Jens - in $ (cat) funktioniert definitiv. für i in $ (cat file.txt); echo $ i funktioniert -Cyrus Ich bekomme nicht mehr den "Befehl nicht gefunden", aber jetzt bekomme ich kein Echo mehr, wenn der Port geöffnet ist – johnnystetson