zuweisen eines ausdrucks x= $1 != [0-9]*

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Nano, 19.02.2008.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi, leider habe ich foglendes problem ich würde gerne einen ausdruck
    z.b $1 != [0-9]*
    einer variablen zuweisen und zwar das ergebnis also in diesem fall ein "ture" oder "false" leider konnte ich dazu nichts finden, wohl weil ich nicht genau weiss nach was ich suche,...
    klammer habe ich versucht leider ohne erfolg
    x='$1 != [0-9]*' bringt $1 != [0-9]*
    als ergebnis
    x="$1 != [0-9]*" bringt wertderzahl != [0-9]*
    ( und{ und [ brachten leider auch keinen erfolg
     
  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 Aqualung, 19.02.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Was willst Du eigentlich machen? Wenn $1 eine Zahl ist, dann soll etwas passieren?

    Aqualung
     
  4. #3 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    woah, entscheide dich mal für'ne sprache.
    Code:
    $1 != [0-9]*
    in welcher sprache funktioniert das denn bitte so?
    ist
    Code:
    [0-9]*
    eine regex?

    also die bash kann sogar einigermaßen mit regexes umgehen, aber generell für "abfragen" schau dir erstmal
    Code:
    man test
    an. das ding gibt als rückgabewert "0" für true und ungleich null für false. (also genau umgekehrt wie in "klassischen" sprachen...)
    lies dir mal'n paar bash tutorials durch... (gibts viele gute von, google ist dein freund)
    du arbeitest in einem skript und "$1" ist dein erster parameter, richtig? btw: die single-quotes (') verhindern die variablen-expansion (nur so nebenbei)...
    aber hier, wenn du schaun willst, ob die regex [0-9]* in einer variable bla matcht, machst du einfach:
    Code:
    if [[ $bla =~ [0-9]* ]]; then echo 'lolol'; fi
    wobei die regex "[0-9]*" IMMER matchen wird....
    regex tutorials gibts auch viele im netz...
    ganz informative seite zu regexes
     
  5. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    ok nochmal von vorne war vielleicht etwas unglücklich formuliert,
    ich habe ein statement das bei auswertung true oder false ergibt
    also $zahl != [0-9]*
    würde true ergeben wenn $zahl z.b ein "a" wäre
    und dieses ergebnis würde ich gerne in eine variable speichern
    also in der form

    VARIABLE = $zahl != [0-9]*

    wobei $zahl != [0-9]* noch irgendwie berechnet geklammert oder was auch immer werden muss damit es der VARIABLE zugewiesen werden kann ( als true oder false )
     
  6. #5 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    und warum genau? reicht eine normale if-verzweigung nicht aus?
    und afaik geht das nicht ohne weiteres. der "standard" weg für kausale verzweigungen/tests ist, wie bereits erwähnt das programm test.

    das bash-builtin mit "[[ bla =~ zomg ]]" liefert AFAIK keinen rückgabewert zurück, den man in einer variable speichern kann, sondern ist direkt in verbindung mit einem if-statement zu verwenden.

    mit test könnte man sowas krüppeliges konstruieren:
    Code:
    test $(echo "$bla" | egrep '[0-9]*')
    var=$?
    $? ist der rückgabewert des letzten programmes. wenn "test" erfolgreich war, gibt es 0 zurück, wenn nicht, etwas ungleich 0. (wahrscheinlich 1 oder so...)
    und die erste zeile testet, ob der string, den das kommando "echo $bla | egrep '[0-9]*'" zurückgibt nicht leer ist. also quasi ob die regex gematcht hat. wobei deine regex auch in leeren strings matcht, von daher....
     
  7. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    kein spezieler grund wollte was versuchen und hab dabei festgestellt das ich das so nicht zuweisen kann und würde gerne wissen warum .
    Ich kenn es nur aus anderen Programmiersprachen das eben diese a != b teil im prinzip durch true oder false zu ersetzen ist , klar kann man das anders umgehen aber ich gehe bzw ging fest davon aus das es möglich ist und nur ein paar klammern fehlen
    nein doch nur strings die mit einer zahl beginnen
     
  8. #7 Wolfgang, 19.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Von welcher Shell redest du?

    Bash:
    true = 0;
    false > 0;
    Willst du eine var testen, kannst du das direkt oder über den Rückgabewert von test machen.

    e.g.
    Code:
    a=123456;
    b=12A456;
    test -z ${a//[0-9]/};   # alle Ziffern raus!
    FLAG=$?; 
    echo $FLAG;
    0
    test -z ${b//[0-9]/};   # alle Ziffern raus!
    FLAG=$?; 
    echo $FLAG;
    1
    
    oder direkt:
    Code:
    if [ -z ${a//[0-9]/} ]; 
    then
    echo Nur Ziffern;
    FLAG=0;
    else
    echo "Error not only digit";
    FLAG=1;
    fi
    
    Ups schon jemand vor mir feddisch. ;)
    Macht nix trotzdem meine Variante für die Bash.

    Gruß Wolfgang
     
  9. #8 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    nö, strings in denen die character-class [0-9] null bis (theoretisch) unendlich oft vorkommt...
    wenn sie mindestens einmal vorkommen soll/muss, nimm + statt *
     
  10. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    also ich weiss nicht warum aber

    Code:
    if [[ $1 != [0-9]* ]]
    then
    echo "keine natürliche zahl"
    fi
    
    geht aber

    Code:
    if [[ $1 != [0-9]+ ]]
    then
    echo "keine natürliche zahl"
    fi
    
    geht nicht und es wird "keine natürliche zahl" ausgegeben
    beide versionen selbstverständlich mit der selben zahl getestet..

    auch funktionieren die beispiele aus dem tutorial wie z.b "^[0-9]$" für nur ein zahl nicht, hat jemand eine ahnung woran das liegt ?
    als shell nutze ich bash unter solaris
     
  11. #10 Aqualung, 19.02.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    man re_syntax

    * a sequence of 0 or more matches of the atom

    + a sequence of 1 or more matches of the atom

    Gruß Aqualung
     
  12. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    das ist mir bewusst aqualung aber es geht halt nicht wenn ich das skript in dem nur obiger code steht mit "skriptname zahl" starte bekomm ich im 2ten fall die meldung ...
    was ja nicht sein dürfte da ich ja eine zahl angebe
     
  13. #12 Gott_in_schwarz, 19.02.2008
    Zuletzt bearbeitet: 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    das liegt daran, dass das hier:
    Code:
    if [[ $bla != [0-9]* ]]
    überhaupt keine regex ist, sondern einfach nur ein bash pattern matching whatever. also normale wildcards (* und ?) und character classes, die jedoch per default genau einmal matchen...
    was quasi auf meine zweite frage in diesem thread zurück führt:
    nun haben wir die antwort: nein, es ist keine regex...
     
  14. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    hm mag sein das ich dich dann falsch verstanden habe ich will die parameter die beim starten des script übergeben werden überprüfen , in diesem einfachen beispiel halt einfach ob es eine positive natürliche zahl ist, worin beste dann der unterschied wenn es kein regex ist ?
     
  15. Anzeige

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

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Du kannst eine regexp z.B. mit grep verwenden, ein bash pattern-globbing eben mit der bash.

    Gruß Aqualung
     
  17. #15 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    if [[ $this_is =~ true ]]; then i_will_eat='a besenstiel'; fi #n

    also mit dem fantastischen "=~" operator kann bash auch extended regexes. \o/

    und @ threadersteller: ich hab dir'n link zu'ner informativen seite über regexes gegeben und die relevante stelle aus "man bash" zu diesem pattern matching (globbing?) schwurbel auch. entscheide dich für eins und freue dir.
     
Thema:

zuweisen eines ausdrucks x= $1 != [0-9]*

Die Seite wird geladen...

zuweisen eines ausdrucks x= $1 != [0-9]* - Ähnliche Themen

  1. Bash Variable zuweisen

    Bash Variable zuweisen: Hi, folgendes hat bis zu letzten upgrade prima funktioniert #/bin/sh doit=$( ftp -n<<@@@ open okonfo-rao-kawawa.de...
  2. ttyS0 IP-Adresse zuweisen

    ttyS0 IP-Adresse zuweisen: Hallo, ich habe am /dev/ttyS0 Port ein device hängen und versuche über den Befehl: ---------- ifconfig ttyS0 192.168.1.1 ---------- dem Port...
  3. Benutzern Maschinenaccounts zuweisen mit Samba

    Benutzern Maschinenaccounts zuweisen mit Samba: Hallo, es wird ein PDC über Samba realisiert an dem sich die User anmelden und auf Freigaben zurückgreifen können. Nun die eigentliche Frage:...
  4. sudo -s verbieten (Zuweisen von root shell)

    sudo -s verbieten (Zuweisen von root shell): Ich würde gerne das dauerhafte Zuweisen von Rootrechten für einen Benutzer per sudo -s verbieten, weiß jemand ob bzw. wie ich das machen kann?
  5. create einer gruppe zuweisen

    create einer gruppe zuweisen: Sers Leute, ist es möglich zu sagen, "Alle ordner oder Dateien die unter /home/xyz erstellt werden gehören der gruppe test an". Das benötige ich...