script schreiben



  • Hallo,

    #!/bin/bash

    ssh root@192.168.10.17
    echo 'Hallo'

    Das ist mein script. Ich verbinde mich mit ssh auf meinen Rooter. Was ich nicht versthe warum er das echo 'Hallo' nicht auf dem Rooter ausfuehrt sondern erst wenn ich die Verbindung mit exit beende.



  • Vielleicht wirste sowas mögen:

    ssh 127.0.0.1 <<EOT
    echo hallo
    ls
    EOT
    


  • Versteh ich jetzt nicht.
    Ich weiss echt nicht wie ich auf dem router "Hallo" ausgeben kann nachdem ich die Verbindung mit ssh aufgebaut habe. Irgendwie schluckt der das nicht.



  • Befehle die du auf dem Server ausführen willst, nimmt ssh als Parameter. Siehe Dokumentation von ssh.



  • Und weiss jemand warum das if vor der eckigen Klammer und nach der eckigen Klammer ein Leerzeichen braucht ?

    if [ $1 == $2 ]
    


  • blurry333 schrieb:

    Versteh ich jetzt nicht.
    Ich weiss echt nicht wie ich auf dem router "Hallo" ausgeben kann nachdem ich die Verbindung mit ssh aufgebaut habe. Irgendwie schluckt der das nicht.

    Die Ausgabe wird zurückgeleitet an Dich.
    Deswegen ja auch ls als Beispiel. Das sollte anzeigen, welche Dateien dort liegen.



  • blurry333 schrieb:

    Und weiss jemand warum das if vor der eckigen Klammer und nach der eckigen Klammer ein Leerzeichen braucht ?

    if [ $1 == $2 ]
    

    Ja, ich weiss es. Ist das wichtig?



  • blurry333 schrieb:

    Und weiss jemand warum das if vor der eckigen Klammer und nach der eckigen Klammer ein Leerzeichen braucht ?

    if [ $1 == $2 ]
    

    Nimm lieber [[ ]] statt [ ]. Die Syntax ist im Prinzip dieselbe, aber man macht weniger Fehler. Es heißt übrigens = und nicht ==, das ist nicht C++.

    [ $1 = $2 ] gibt nämlich eine Fehlermeldung, wenn $1 leer ist.
    [[ $1 = $2 ]] dagegen funktioniert immer wie erwartet.



  • [ ist ein Programm, üblicherweise /usr/bin/[ und ein Alias für /usr/bin/test.

    if [ foo = bar ]; then
    fi
    

    ist das selbe wie

    if test foo = bar; then
    fi
    

    if in der POSIX-Shell prüft den Rückgabewert dessen, was ihm als Parameter übergeben wurde (0 bedeutet wahr, alles andere falsch) und handelt dementsprechend. Man kann da locker auch andere Programme einsetzen, wenn man ihr Rückgabewertverhalten kennt; beispielsweise

    if grep foo bar.txt > /dev/null; then
      echo bar.txt enthält den String \"foo\".
    fi
    


  • seldon schrieb:

    if grep foo bar.txt > /dev/null; then
      echo bar.txt enthält den String \"foo\".
    fi
    

    Oder aber:

    if grep -q foo bar.txt ; then
      echo bar.txt enthält den String \"foo\".
    fi
    

    Warum sollte grep Ausgaben erzeugen, die nach /dev/null wandern. -q sagt grep, er soll erst gar nichts ausgeben. 😉 🕶 🤡



  • Weil das ursprüngliche grep aus UNIX V7 die -q-Option nicht beherrscht. :p

    Aber Spaß beiseite, wenn man sich auf POSIX stützen kann, was meistens der Fall sein dürfte, ist -q natürlich hübscher. Ich hab das bloß nicht auswendig gewusst.


Anmelden zum Antworten