Anzeige:
Ergebnis 1 bis 12 von 12

Thema: true / false...aber wie?

  1. #1
    latenite
    Gast

    true / false...aber wie?

    Hallo Leute,

    ich glaub ich bin einfach zu müüüdüe. Was mache ich hier falsch? warum werden beide "echo" ausgegeben?
    Wenn 1 also false im if-statement steht dann sollte da doch nichts passieren?

    help & danke

    sorry hab das testscript vergessen:

    #!/bin/bash

    if [ 0 ]; then
    echo "ok"
    fi

    if [ 1 ]; then
    echo "not ok"
    fi
    Geändert von latenite (05-05-2009 um 12:35 Uhr)

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    kannst du auch mal ein bisschen Code dazu posten?

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ein Boolisches true/false bei bash gibt es nicht. Gibt es auch sonst nicht, denn dass sind nur Definitionen der einzelnen Sprachen. In Wirklichkeit ist es und 0|1
    PHP-Code:
    function isTrue() {
     if  
    test $-eq 1 then
      
    return ## ist True
     
    else
      return 
    ## ist False
     
    fi

    Geändert von undefined (05-05-2009 um 14:59 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Zitat Zitat von undefined Beitrag anzeigen
    Ein Boolisches true/false bei bash gibt es nicht. Gibt es auch sonst nicht, denn dass sind nur Definitionen der einzelnen Sprachen. In Wirklichkeit ist es und 0|1
    PHP-Code:
    function isTrue() {
     if  
    test $-eq 1 then
      
    return ## ist True
     
    else
      return 
    ## ist False
     
    fi

    Ich glaube die Shell wertet den Rückgabewert des Kommandos/Built-Ins in der if-Bedingung aus. In diesem Fall wäre es genau umgedreht, also 0 == true und 1 == false.

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  5. #5
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Die Rückgabe Werte liegen zwischen 0 - 255. Und wie schon geschrieben ein true/false (0/1) gibt es daher nicht. Mein Beispiel sollte im nur zeigen wie man so etwas Realisieren könnte.
    Man bash:
    The exit status of an executed command is the value returned by the waitpid system call or equivalent function. Exit statuses fall between 0 and 255, though, as explained below, the shell may use values above 125 specially. Exit statuses from shell builtins and compound commands are also limited to this range. Under certain circumstances, the shell will use special values to indicate specific failure modes.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  6. #6
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Okay, hatte bei deinem Posting vor allen Dingen auf die Kommentare geschaut...
    Mit dem > 1 hast du natürlich recht.
    Ein gebrechlich Wesen ist der X-Server.

  7. #7
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    ja - Ich hätte es auch etwas besser beschreiben können. Aber wie immer extrem Schreibfaul
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  8. #8
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    Du führst einen test aus, dem Du das Argument "0" bzw. "1" übergibst. Das interpretiert test als "ja, da ist etwas" und liefert true zurück.

    Wenn Du direkt einen Wert wahr / falsch abfragen willst, dann nutze die Shell-Builtins true und false:

    Code:
    if true; then
    echo "ok"
    fi
    
    if false; then
    echo "not ok"
    fi
    jan@jack:~> true
    jan@jack:~> echo $?
    0
    jan@jack:~> false
    jan@jack:~> echo $?
    1
    Jan

  9. #9
    latenite
    Gast

    ok soweit verstanden..danke

    ok danke für s erklären.
    was ich eigendlich vor hatte war den returnwert von "ping -c 1 url" der entwerde 0 oder 1 ist vom if-statement prüfen zu lassen und dann abhängig davon weiter zu verfahen. z.b. einen download starten....

    also so:

    0:526:me@x301 ~ [0]$ if [ "ping -c 1 google.de" != "0" ]; then echo "huhu" ; fi
    huhu
    0:527:me@x301 ~ [0]$ if [ "ping -c 1 google.de" != "1" ]; then echo "huhu" ; fi
    huhu
    0:528:me@x301 ~ [0]$

    nur wie verwende ich denn die 0 und 1 aus das mir das ping zurückgibt in dem if-statement?
    danke

  10. #10
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Die Antwort hat dir Jan eigentlich schon gegeben
    Code:
    ping -c2 -t3 127.0.0.1 ; echo $?
    Edit: Ein Auszug einer meiner Scripte. Im prinzip genau das was du auch machen möchtest.
    PHP-Code:
    function ntpd_ping_before_request() {
      if [ -
    "$NTP_PING_ADDRESS]; then
        ping 
    -c${NTP_PING_COUNT:-"2"} -W${NTP_PING_TIMEOUT:-"5"$NTP_PING_ADDRESS > /dev/null
        
    return $?
      
    fi
      
    return 0

    Geändert von undefined (06-05-2009 um 09:04 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    naja, so richtig durchdrungen hast Du das noch nicht ;-) Nochmal: Schon das "if - then - else"-Konstrukt wertet den Rückgabewert des ausgeführten Kommandos aus. Der test (oder in Deiner Version die äquivalenten [..]) liefert auch nur das Ergebnis der Evaluierung seiner Argumente als RC, den brauchst Du also nur dann, wenn Du nicht direkt den Returncode eines Kommandos auswerten kannst. In Deinem Fall ist test also schlicht und einfach überflüssig - ping liefert Dir schon den zu prüfenden Returncode.

    Das, was Du in Deiner Kommandozeile gemacht hast, ist zu prüfen, ob der String "ping -c 1 google.de" ungleich dem String "0" oder "1" ist.

    undefined hat Dir schon eine Variante gezeigt, wie man das in einer Funktion kapseln kann, hier noch die direkte Version.

    Code:
    if ping -c 1 google.de; then  echo "juhu" ; fi
    if ! ping -c 1 google.de; then  echo "och nö" ; fi
    Jan

    P.S.: Bitte benutze Code-Tags, wenn Du Script-Auszüge postest, das macht die Sache übersichtlicher.

    EDIT: Schau Dir das hier mal an, da gibt es ein paar Beispiele mehr: http://www.jan-trippler.de/de/script_tipps/true.html
    Geändert von jan61 (06-05-2009 um 18:37 Uhr)

  12. #12
    latenite
    Gast
    ok gerafft. danke an alle

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •