shell-script für das vergleichen von zwei Variablen
Habe ich ein Skript erstellt für die Aktualisierung einige IP-Adresse in iptables. Hiermit beschreibe ich die Probleme, die ich bin mit Blick auf, die.
Fragen:
- Vergleich nicht passiert zwischen zwei Variablen in einem Skript
- Am Ende von Skript brauche ich, um einen Befehl auszuführen, ie; service starten/stoppen etc und die Ausgabe der Befehle sichtbar sein sollte, während das Skript ausgeführt wird.
1) Hier bin den Vergleich von zwei Variablen strings:
BASE=172.31.0.0
CMD=172.31.1.0
if [[ "$CMD" == "$BASE" ]]; then
echo "ip are same"
else
echo "not matched"
fi
aber es gibt keine Reaktion/Ausgang während der Ausführung des obigen Skriptes. Hier ist nicht der Vergleich ist nicht passiert..Freundlich darauf hin eine optimale Lösung um dieses Problem zu beheben.
2) nach ausführen des Skripts die ich brauche, um den Neustart der iptables:
BASE=172.31.0.0
CMD=172.31.1.0
if [[ "$CMD" == "$BASE" ]]; then
echo "ip are same"
else
echo "not matched"
fi
service iptables restart
iptables -nvL
Einem script angezeigt werden sollen, die die Ausgabe der letzten beiden Zeilen (Befehle). Freundlich darauf hin mich die beste Lösung und wie diese in eine beste Weg.
Also ... genau das, was shell benutzt du? bash oder sh? Sie wissen, Sie sind anders, richtig? Da ist dieses Skript funktioniert in bash und produziert einen Fehler in sh. Weder das sind, was Sie sind reporting.
Vielen Dank für Ihre Antwort, Bin mit bash-Skript und ich bin versucht, führen Sie dieses Skript aus, indem Sie ./script.sh.
Du meinst, dass Sie keine - Ausgang und keine Fehlermeldung? Das klingt seltsam.
Hinzufügen
#!/bin/bash
auf die erste Zeile Ihres Skripts, einfach zu behaupten es wird ausgeführt, mit bash
wenn Sie ./script.sh
.InformationsquelleAutor suboss87 | 2013-02-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ist sehr seltsam. Diese funktionieren sollte, so dass, wenn es nicht funktioniert haben Sie etwas wichtiges vergessen haben.
Wie wird dieses Skript ausgeführt wird? Sie geben Sie einfach ./Skript oder ist es ausgeführt, die von einigen service (wie cron)?
Hier sind einige Vorschläge, um debug:
Sanity-check: sehen Sie, wenn bash funktioniert (vielleicht ist Ihre login-shell ist nicht die bash, so dass Sie nicht bemerkt). Führen Sie diese auf dem terminal:
Er druckt Hallo Welt, richtig? Wie wäre es damit:
Wenn einer der oben genannten nicht funktioniert, Sie haben ein problem mit der bash-installation.
Anstelle der Ausführung des Skripts mit ./script.sh führen Sie es wie folgt:
Nichts? Dies ausführen:
Wenn es endet mit etwas wie "with CRLF line terminators", dann cdarke es genagelt: die Datei erstellt wurde, auf Windows mit einem ungeeignetem Werkzeug. Erstellen Sie unter Linux oder verwenden Sie dos2unix. Aber wie auch immer, ich bezweifle es, denn mit einem CRLF enden wollenden Datei bekomme ich diese ausgegeben:
Statt gar nichts.
Setzen diejenigen, die diese Zeile am Anfang der Datei:
(unten #!/bin/bash, wenn Sie es haben). Dies sorgt für ein debugging trace gedruckt wird, zeigt jedes Kommando, wie es ausgeführt wird.
Wenn es immer noch nichts angezeigt.. diese auf Ihr Skript (unten set-x wenn Sie legen es):
Dann überprüfen, ob es eine /tmp/Hallo-das-ist-seltsam - Datei, nachdem Sie das Skript ausführen.
Ich denke, sed ist besser geeignet für diese Aufgabe:
echo 172.31.0.0 | sed 's/\.//g'
War jemand von Punkten meine Antwort für Sie hilfreich? Ich verstehe immer noch nicht was war dein problem (und fühlen sich frei zu Bearbeiten, auf Ihre Frage hinzufügen mehr info), aber wenn meine Reaktion löste es bitte akzeptieren Sie es.
InformationsquelleAutor darque