Hilfe beim Bashscript

  • Hallo, ich wollte mir ein kleines Script schreiben, was mir bei der Erstellung von Datenbanken hilft, aber irgendwie, will es nicht so richtig ;)
    Hier das Script:


    Und hier die Fehlermeldung:

    Code
    ./mysql: 8: [: test: unexpected operator


    Ich weiß echt nicht, was ich falsch gemacht habe.

  • Ok, es funktioniert, danke dir.
    Aber Erklärungsbedarf bitte, warum "=", das ist doch ein Zuweisungsoperator, oder nicht?


    Dann noch eine weitere Frage, wenn er beim Befehl

    Code
    mysql -u root -p


    angekommen ist, dann gebe ich das Passwort ein, aber dann führt ein mein Script nicht weiter aus, sondern, ich bin einfach in MySQL angemeldet (mysql> steht da jetzt) und erst wenn ich manuell exit eingebe, führt er mein Script weiter aus, was mir an der Stelle aber nicht bringt, da ich nicht mehr in MySQL angemeldet bin.


    Hoffe ihr könnt mir helfen ;)

  • hehe :) ja das dort ein = anstatt ein == eingesetzt wird ist irgendwie verwirrend, da man es aus anderen Programmiersprachen so kennt.


    versuche es mal so:


    Du merkst, dass ein Bug an dir hoch krabbelt. Du findest ihn nett und nennst ihn Exploit.

  • Moin


    Bist Du sicher, das Bei dir sh ein Symlink auf bash ist?


    Wen Du ein Bash-Skipt schreiben willst, solltest Du immer bash im Shebang verwenden.
    Am besten so:

    Code
    #!/usr/bin/env bash


    Mordor

  • hehe :) siehste das wollte ich auch noch sagen, du erstellst hier ein shell script und kein bash script


    aber für ein bash script wäre doch "#!/bin/bash"?

    Du merkst, dass ein Bug an dir hoch krabbelt. Du findest ihn nett und nennst ihn Exploit.

  • Keine Ahnung, was ich hier erstelle ;)
    Kenne mich da nicht wirklich so aus :D Bin nur in den anderen Programmiersprachen aktiv xD
    Aber egal, es geht :P


    Ich füge dem Script jetzt noch was hinzu, sollte ich noch ein paar Probleme haben, melde ich mich hier nochmal.
    Danke euch beiden auf jeden Fall.


    MfG


    DEWONIX

  • Moin

    aber für ein bash script wäre doch "#!/bin/bash"?


    Ja, aber woher weist Du denn, wo genau bash (oder ein anderer Interpreter) liegt?
    Deshab der Umweg über env. Damit ist es egal, wo der gewünschte Interpreter liegt, und das Skript läuft auch auf einem anderen System noch.


    Mordor

  • Ja, aber woher weist Du denn, wo genau bash (oder ein anderer Interpreter) liegt?
    Deshab der Umweg über env. Damit ist es egal, wo der gewünschte Interpreter liegt, und das Skript läuft auch auf einem anderen System noch.


    Das gilt afaik nur für andere Interpretersprachen, die normalerweise in /usr/bin liegen (PHP oder Perl z.B.), aber nicht für Programme in /bin. Denn die sind normalerweise immer und überall dort. Einzige Ausnahme sind maximal Embedded Systeme, wo Dinge erst später in /opt o.ä. nachinstalliert werden und das RootFS eventuell auch noch Read-Only ist.



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Moin

    ..., aber nicht für Programme in /bin. Denn die sind normalerweise immer und überall dort.


    Da immer mehr Distis (z.B. Fedora, Arch, ...) dazu übergehen, /bin und /sbin nicht mehr zu verwenden, stimmt die Aussage nicht mehr.


    Die meisten Softwareprobleme entstehen, weil Programmier Annahmen machen über Funktionen, die nicht ihrer Kontrolle unterliegen und wo sich dann auf einmal doch was ändert.


    Mordor