tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von deepthroat
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
597
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    Ich hab hier ein sicher banales Problem, ich fliege immer per exit 4 aus dem Programm, $ERROR bekommt nie den Wert 0. Hat jemand eine Idee, an was das liegen könnte?

    Beispielinhalt der .data
    Code :
    1
    2
    3
    
    benutzername=passwort
    test=test
    hallo=hier

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    #!/bin/bash -x
     
    extractPasswd()
    {
            THENAME=$1
        ZERO=0
        ERROR=1
        # read corresponding password
        FILE=~/.data
        if [ -s $FILE ]; then
            cat $FILE | while read LINE; do
                USR=${LINE%=*}              # extracts the username
                PW=${LINE#*=}               # extracts the password
     
                # correct user found, exit
                if [ "$THENAME" == "$USR" ]; then
                    ERROR=0
                    break;
                fi
            done
        fi
     
        # check for errors
        if [ $ERROR -ne $ZERO ]; then
            exit 4;
        fi
    }
    Geändert von Alex Duschek (07.05.10 um 08:00 Uhr)
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Dadurch, das du das while in einer Pipe verwendest wird das in einer Subshell ausgeführt. Änderungen an Variablen in der Subshell wirken sich nicht auf Variablen der "Ober"-Shell aus.

    Man sollte sowieso versuchen sowenig externe Programme wie möglich aufzurufen. In dem Fall kann man einfach eine Umleitung verwenden:
    Code bash:
    1
    2
    3
    
    while read LINE; do 
       ...
    done < $FILE
    Du könntest dir auch diese ERROR Variable sparen und einfach return 0 in der Schleife aufrufen und nach der Schleife return 1 (\edit: bzw. exit 4)

    Gruß
    Alex Duschek bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von Alex Duschek
    Alex Duschek Alex Duschek ist offline I AM AWESOME
    Registriert seit
    Apr 2004
    Ort
    Bartholomä (Baden-Württemberg)
    Beiträge
    514
    Jup, daran lags, danke!

    PS: Irgendwer muss meinen Thementitel gestohlen haben
     

Ähnliche Themen

  1. Bash Script
    Von Spranta im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 23.06.08, 12:52
  2. Bash <TAB>
    Von kevkev im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 18.01.06, 19:05
  3. Bash Zufallszahl
    Von kevkev im Forum Linux & Unix
    Antworten: 4
    Letzter Beitrag: 15.01.06, 16:32
  4. Bash Regex
    Von kevkev im Forum Linux & Unix
    Antworten: 3
    Letzter Beitrag: 09.01.06, 21:14
  5. C vs bash
    Von webfreak im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 04.04.04, 10:23