Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Unix shell wie feststellen ob Variable eine Zahl ist?

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.03.2002
    Beiträge
    32

    Unix shell wie feststellen ob Variable eine Zahl ist?

    Hi,
    wie lässt sich mit der shell feststellen ob eine Variable eine Zahl ist?

    mfg
    wdsl

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Holzhammermethode :
    Code:
    peschmae@sid:~$ I=3
    peschmae@sid:~$ if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi
    true
    peschmae@sid:~$ I=3a
    peschmae@sid:~$ if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi
    bash: [: 3a: integer expression expected
    false
    peschmae@sid:~$
    Wobei die ist wirklich blöd. Nur die erste Idee. Zweite Variante - grep, schon etwas weniger doof *g*:
    Code:
    peschmae@sid:~$ I=31284
    peschmae@sid:~$ echo $I | grep -q -e "^[0-9][0-9]*$"
    peschmae@sid:~$ echo $?
    0
    peschmae@sid:~$ I=31284a812
    peschmae@sid:~$ echo $I | grep -q -e "^[0-9][0-9]*$"
    peschmae@sid:~$ echo $?
    1
    kannst du dann in dem Stil verwenden:
    Code:
    if echo $I | grep -q -e "^[0-9][0-9]*$"; then 
      echo zahl; 
    else 
      echo keinezahl; 
    fi
    MfG Peschmä
    Geändert von peschmae (05-01-2007 um 18:52 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.03.2002
    Beiträge
    32
    fällt dir sonst noch was ein?

    Code:
    I=ja;if [ $I -eq 0 -o $I -ne 0 ]; then echo true; else echo false; fi
    gibt true zurück auf Solaris

    und grep mit der Option -e kann ich nicht bzw nur sehr ungern verwenden.

    mfg
    wdsl

  4. #4
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Zitat Zitat von wdsl Beitrag anzeigen
    ...
    gibt true zurück auf Solaris
    Ich ging jetzt mal vom GNU-Zeugs aus.

    und grep mit der Option -e kann ich nicht bzw nur sehr ungern verwenden.
    Geht auch ohne das -e. Zumindest mit gnu grep. Das -e ist nur so ein Reflex bei mir.

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2003
    Beiträge
    118
    Sollte grep nicht Quantifizierer kennen? Also anstatt

    Code:
    ^[0-9][0-9]*$
    lieber

    Code:
    ^[0-9]{1,}$
    oder am Besten

    Code:
    ^[0-9]+$
    ?

  6. #6
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Dachte ich eigentlich auch, nur ging das irgendwie nicht. Jetzt hab ichs noch mal schnell getestet und bin dank txt2regex auf die Idee gekommen, das + extra zu escapen - damit gehts dann:

    Code:
    grep -q "^[0-9]\+$"
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  7. #7
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hallo,
    wie wäre es damit ?
    Gruss zst

    Code:
        EING=$1
        case $EING in
    	'' | *[!0-9]* ) echo -e "$EING ist keine Zahl!" ; exit 1 ;;
        *) ;;
        esac

Lesezeichen

Berechtigungen

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