Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von DarkAngelw, 03.05.2007.

  1. #1 DarkAngelw, 03.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    Hallo Zusammen

    Ich bin hier neu und muss schon von beginn an sagen, dass ich ein ziemlicher Anfänger bin was das Scripten an geht. Hatte mal einen Kurs in Windowsscripting, da dieses Script, welches ich aber nun erstelle auf einem FreeBSD läuft, stosse ich schon bei meiner ersten Aufgabe an die Grenzen.

    Deshalb möchte ich euch gerne bitten, vielleicht ein bisschen rücksicht auf Anfänger zu nehmen und fragen, ob ihr euch vielleicht das Flussdiagramm anschaut und mit dann sagt, wie ich dies am besten in Bash umsetze und ob der Anfangscode, welchen ich erstellt habe, einigermassen stimmt.

    [​IMG]

    Nun zum Anfangscode welchen ich erstellt habe:
    Code:
    #!/bin/bash
    reponame=hallo
    vergleich=`find /usr/home/svn/repos/$reponame`
    echo $vergleich > /usr/home/svn/repos/repolist.tmp
    
    if [ `less /usr/home/svn/repos/repolist.tmp` = " " ]
    then
            echo "repo wird hier erstellt werden"
    else
            echo "repo schon vorhanden"
    fi
    
    exit 00
    
    Jedoch erscheint danach folgende Fehlermeldung:
    Code:
    find: /usr/home/svn/repos/hallo: No such file or directory
    [: =: unexpected operator
    
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Always-Godlike, 03.05.2007
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    mh... dieses flussdiagram ist schon lustig^^

    Ich hab zwar noch nie ein Script für die Bash geschrieben, aber ich glaube eines ist bei fast allen sprachen gleich:

    Vergleichsoperatoren wie "gleich" werden mit == geschrieben, nicht =

    Also :
    if [ `less /usr/home/svn/repos/repolist.tmp` == " " ]

    Wie gesagt, ich hab keine ahnung, aber das würde ich mal so von allen möglichen anderen sprachen her annehmen.

    Und bei der Fehlermeldung "No such file or directory" würde ich einfach mal überprüfen obs, diesen ordner "hallo" wirklich gibt. Ich denke die Ausgabe ist eindeutig.
     
  4. #3 Wolfgang, 03.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Nein, das Problem ist hier nicht das =.
    find gibt lediglich über <STDERR> aus, dass kein Verzeichnis gefunden wird.

    Beim Vergleich ist der erste Teil folglich leer.

    Wenn du nun mal schaust, wie die Shell Variablen auflöst, wird aus deinem Vergleich
    Code:
    if [ =" " ]
    Was deine Shell als Fehler meldet, da ja beim Vergleich (Test) zwei Argumente erwartet werden.

    Das regelst du besser mit:
    Code:
    vergleich=$(find /usr/home/svn/repos/$reponame 2>/dev/null)
    
    
    if [ "x$vergleich" = "x" ]
    then
            echo "repo wird hier erstellt werden weil \$vergleich leer"
    else
            echo "repo schon vorhanden"
    fi
    
    exit 
    
    Ich habe mir dein Flussdiagramm nicht gründlich angesehen, aber es ist schon beinahe altmodisch und für mich bewundernswert, dass jemand sowas noch macht (bei kleinen Projekten).

    So habe ich das vor 30 Jahren auch gelernt.

    Gruß Wolfgang
    PS Kleiner Tipp: verwende $(command) statt Backticks.
     
  5. #4 DarkAngelw, 06.05.2007
    Zuletzt bearbeitet: 06.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    Hallo Wolfgang,

    danke für deine Hilfe. Das funktioniert ja perfekt. Falls ich wieder an ein Problem treffe, melde ich mich wieder.

    Und ja das ist halt noch alte Schule so nen Flussdiagramm, aber für das bin ich ja auch noch in der Ausbildung zur Informatikerin.

    Liebe Grüsse
    DarkAngelw
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    och, das erste mal gings, und jetzt nid mehr. warum nicht?

    Code:
    # Bildschirmflaeche leeren
    clear
    
    # Repository Informationen
    echo "Wie soll das Repository heissen?"
    echo -n "Repositoryname: "
    read reposname
    
    # Vergleichen mit schon vorhandenen Repositories
    vergleich=$(find /usr/home/svn/repos/$reponame 2>/dev/null)
    
    
    if [ "x$vergleich" = "x" ]
    then
            echo "hallo welt"
    
    else
            echo "schon vorhanden"
    
    fi
    
     
  6. #5 Wolfgang, 06.05.2007
    Zuletzt bearbeitet: 06.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Wenn du meine Hervorhebung mal genau ansiehst, kommst du vermutlich auf den Fehler. ;)

    Tipp:
    Wenn du Verzeichnisse oder Dateien aus Usereingaben liest, ist es immer sinnvoll, diese auf Existens zu testen.
    Code:
    if [ -e "$DATEINAME" ];
    then 
    echo "$DATEINAME ist eine Datei"
    else
    echo "$DATEINAME ist keine Datei"
    fi
    
    Gruß Wolfgang
     
  7. #6 DarkAngelw, 06.05.2007
    Zuletzt bearbeitet: 06.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    ok das könnte natürlich der fehler sein. sorry tut mir leid das ich gestört habe
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    und tatsächlich, ja das ist der fehler. und ich hab auch zu erst noch mein /dev/null kaputt gemacht, aber nun geht alles wieder.
     
  8. #7 Wolfgang, 06.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Und wie macht man denn sein /dev/null kaputt?
    <Spaß on> War es verstopft? :D
    <Spaß off>

    Gruß Wolfgang
     
  9. #8 DarkAngelw, 06.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    ich habs gelöscht, aber es konnte mir gleich jemand dabei helfen.

    und ja, nur ich kann das machen.
     
  10. #9 Schlaubi_fi.de, 06.05.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    ...das kommt davon, wenn die Frauen immer Ihre Always in den /dev/null werfen *duck und weg* :D :D :D
     
  11. #10 DarkAngelw, 07.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    also ich hab das jetzt mal überhört.

    Habe mein Script nun ein bisschen weiterentwickelt. Erhalte jedoch folgende Fehlermeldung:
    Code:
    /usr/home/svn/repos/repository.sh: 102: Syntax error: "(" unexpected (expecting "then")
    
    Ich kann den Fehler aber nicht finden!!!!

    Code:
    #!/bin/bash
    
    # ******************
    # *** FUNKTIONEN ***
    # ******************
    
    repositoryname ()
    {
            echo -n "Repositoryname: "
            read reponame
            vergleich_ifschleife
    }
    
    vergleich_ifschleife ()
    {
            #Vergleichen mit schon vorhandenen Repositories
            vergleich=$(find /usr/home/svn/repos/$reponame 2>/dev/null)
    
            if [ "x$vergleich" = "x" ]
            then
                    echo "Nun koennen Sie die User dazu erstellen (Diese User sind fuer je
    des Repository eigenstaendig verwaltbar und stehen nicht in Verbindung mit dem FreeBSD
     System."
            else
                    echo
                    echo "Entweder haben sie keine Eingabe betaetigt oder ein Repository m
    it diesem Namen ist schon vorhanden. Bitte geben Sie einen neuen Repositorynamen an."
                    repositoryname
            fi
    }
    
    conffile_repo_loeschen ()
    {
            rm -r /usr/home/svn/repos/passwd.tmp
            rm -r /usr/home/svn/repos/authz.tmp
            rm -r /usr/home/svn/repos/svnserve.tmp
    }
    
    user_erstellen ()
    {
            echo -n "Username: "
            read user
            echo -n "Passwort: "
            echo "$user = $passwort" >> /usr/home/svn/repos/passwd.tmp
    }
    
    rechte_erstellen ()
    {
            echo -n "Rechte auf Trunk (rw/r/none): "
            read trunk
            echo -n "Rechte auf Tags (rw/r/none): "
            read tags
            echo -n "Rechte auf Branches (rw/r/none): "
            read branches
    
            if [ "$trunk" != "rw" ]
            then
                    if [ "$trunk" != "r" ]
                    then
                            echo "trunknone = $user" >> /usr/home/svn/repos/authz.tmp
                    else
                            echo "trunkr = $user" >> /usr/home/svn/repos/authz.tmp
                    fi
            else
                    echo "trunkrw = $user" >> /usr/home/svn/repos/authz.tmp
            fi
    
            if [ "$tags" != "rw" ]
            then
                    if [ "$tags" != "r" ]
                    then
                            echo "tagsnone = $user" >> /usr/home/svn/repos/authz.tmp
                    else
                            echo "tagsr = $user" >> /usr/home/svn/repos/authz.tmp
                    fi
            else
                    echo "tagsrw = $user" >> /usr/home/svn/repos/authz.tmp
            fi
    
            if [ "$branches" != "rw" ]
            then
                    if [ "$branches != "r" ]
                    then
                            echo "branchesnone = $user" >> /usr/home/svn/repos/authz.tmp
                    else
                            echo "branchesr = $user" >> /usr/home/svn/repos/authz.tmp
                    fi
            else
                    echo "branchesrw = $user" >> /usr/home/svn/repos/authz.tmp
            fi
    }
    
    svnserve_erstellen ()
    {
            echo "[general]" >> /usr/home/svn/repos/svnserve.tmp
            echo "anon-access = none" >> /usr/home/svn/repos/svnserve.tmp
            echo "auth-access = passwd" >> /usr/home/svn/repos/svnserve.tmp
            echo "password-db = passwd" >> /usr/home/svn/repos/svnserve.tmp
            echo "authz-db = authz" >> /usr/home/svn/repos/svnserve.tmp
            echo "realm = $reponame" >> /usr/home/svn/repos/svnserve.tmp
    }
    
    weiterer_user ()
    {
            echo -n "Moechten Sie noch einen weiteren User erstellen ? (y/n)"
            read usererstellen
    
            if [ "$usererstellen" = "y" ]
            then
                    user_erstellen
                    rechte_erstellen
                    weiterer_user
            else
                    echo "Sie haben nun alle noetigen Informationen eingegeben."
            fi
    }
    
    # **************
    # *** Ablauf ***
    # **************
    
    # Bildschirmflaeche leeren
    clear
    
    # Repository Informationen
    echo "Wie soll das Repository heissen? (Bitte verwenden Sie keine Sonder- und/oder Lee
    rzeichen bei der Eingabe des Repositorynamens)"
    
    repositoryname
    conffile_repo_loeschen
    echo "[users]" >> /usr/home/svn/repos/passwd.tmp
    user_erstellen
    echo "[groups]" >> /usr/home/svn/repos/authz.tmp
    rechte_erstellen
    
    exit 0
    
    Vielleicht bin ich auch einfach nur zu Blind.
     
  12. #11 Wolfgang, 07.05.2007
    Zuletzt bearbeitet: 07.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Was steht denn in Zeile 102?
    Ich habe jetzt keine Lust das durchzuzählen. ;)
    Eventuell ja eine if Abfrage mit leerer Variable.

    Kleiner Tipp:
    Versuch mal ein cat -n datei dann bekommst du Zeilennummern.

    Gruß Wolfgang

    edit:
    Noch ein Tipp:
    Um Passwort blind (ohne echo) einzugeben, verwende
    Code:
    read -s var
    -p gestattet sogar ein prompt.
     
  13. #12 Fallout, 07.05.2007
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Folgefehler aus Zeile 82 ;-)
    Bei so etwas ist das Syntax-Highlighting (falls Du vim o. ä. zum Editieren verwendest) ganz nützlich.

    Gruß Daniel
     
  14. #13 DarkAngelw, 07.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    Zeile 102 ist:
    Code:
     echo -n "Moechten Sie noch einen weiteren User erstellen ? (y/n)"
    
    und deswegen komme ich ja nicht auf das Problem
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 supersucker, 07.05.2007
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ähm,

    Fallout hat dir doch den Fehler schon gezeigt?!

    Code:
    if [ "$branches != "r" ]
    Da fehlt noch ein "
     
  17. #15 DarkAngelw, 07.05.2007
    DarkAngelw

    DarkAngelw Jungspund

    Dabei seit:
    03.05.2007
    Beiträge:
    15
    Zustimmungen:
    0
    Hab ich gemacht, gibt genau die gleiche Fehlermeldung aus.
     
Thema:

Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich

Die Seite wird geladen...

Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich - Ähnliche Themen

  1. Kinderleicht: Roboter programmieren mit Open Roberta

    Kinderleicht: Roboter programmieren mit Open Roberta: Das Fraunhofer-Institut für Intelligente Analyse- und Informationssysteme (IAIS), Google und Lego haben das Programm »Open Roberta« gestartet....
  2. PyQT: Wie programmieren?

    PyQT: Wie programmieren?: Hallo, ich weis nicht, ob dieser Beitrag doppelt gepostet wurde, aber es gab da einen kleinen Fehler mit Tapatalk. Ich bin jetzt neu in Python...
  3. PyQT: Wie programmieren?

    PyQT: Wie programmieren?: Hallo, mit welchen Programm schreibe ich am besten in PyQT? Danke im Vorraus Lexi Sent from my iPad using Tapatalk - now Free
  4. Wer hat lust dieses App von Win in Linux zu Programmieren 256kb

    Wer hat lust dieses App von Win in Linux zu Programmieren 256kb: Hi zusammen, wäre es möglich das schnell mal in ein Debian Programm zu schreiben, ich habe keine ahnung vom Programmieren, ich benutze es schon...
  5. Grundlagen Websites programmieren

    Grundlagen Websites programmieren: Hi, ich hab vor längerer Zeit mal Angefangen mir ne Website zu programmieren, damals nur mit html und css. Hat zwar funktioniert, war aber...