Systemvariable testen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • hallo zusammen
    möchte die Systemvariable $1 in einem bash script testen.
    Wenn ich:
    $1:=200
    im script einstelle kommt immer eine Fehlermeldung.
    Hab schon allerhand Varianten probiert, immer eine Fehlermeldung.
    Ich dachte obiger Befel setzt für die Variable $1 auf 200 wenn nichts anderes angegeben wurde.
    Hab leider nichts erklärendes gefunden.
    eiermann1

  • bash Variablen muessen mit einem Alpha oder Underscore beginnen und koennen dann beliebig viele alphanumerische Zeichen haben incl des Underscores. Damit sind Vars beginnend mit 1 nicht erlaubt.

    Anbei ein kleines Script um das Arbeiten mit Vars und Tests zu illustrieren:

  • Zitat


    bash Variablen muessen mit einem Alpha oder Underscore beginnen

    aber ups, im Beispiel heißen die Variablen # und 1

    ja, ich weiß

    $0 ist der Programmaufruf
    $1, $2, ... sind die Parameter 1, 2 usw.
    $# zeigt die Anzahl der Parameter an.

    Keep it simple [,&] stupid

  • aber ups, im Beispiel heißen die Variablen # und 1

    ja, ich weiß

    $0 ist der Programmaufruf
    $1, $2, ... sind die Parameter 1, 2 usw.
    $# zeigt die Anzahl der Parameter an.

    Hallo zusammen
    ja kungel hat es richtig geschrieben.
    Ich starte ein script mit "./script.sh 300" und übergebe dem Script 300 in der systemvariablen $1.
    Jetzt möchte ich im script einen Fehler abfangen, wenn die Eingabe der Variablen vergessen wurde.
    Hab in div. Bash Büchern dann diesen Befehl gefunden:
    $1:=xyz --> bedeutet wenn var1 nicht gesetzt ist nehm xyz.
    Bekomms aber nicht hin.
    eiermann1

  • meinst du vielleicht

    echo ${variable:=xyz}

    Mit einer selbst definierten Variablen funktioniert das.
    Aber nicht mit den Variablen mit fester Bedeutung wie $1 etc.

    Für dein Vorhaben nimm das Beispiel von framp als Vorlage.

    Keep it simple [,&] stupid


  • meinst du vielleicht

    echo ${variable:=xyz}

    Mit einer selbst definierten Variablen funktioniert das.
    Aber nicht mit den Variablen mit fester Bedeutung wie $1 etc.

    Für dein Vorhaben nimm das Beispiel von framp als Vorlage.

    Hallo Kungel
    so geht es auch mit einer Systemvariablen:
    echo ${1:-500}

    das Geheimnis sind die geschweiften Klammern.
    Hier wird die Systemvariable $1, wenn nicht schon belegt mit 500 ersetzt.
    Ich dachte eigentlich es müsste echo ${1:+500} heißen , aber egal es geht.
    Danke nochmal

  • man lernt ja nie aus.

    Aber das Geheimnis sind nicht die geschweiften Klammern (in meinem Beispiel sind sie auch).
    Es ist das Minus-Zeichen.

    Zum Ausprobieren

    Bash
    #!/bin/bash
    
    
    echo "= " ${1:=100}
    echo "- " ${1:-100}
    echo "+ " ${1:+100}

    Mal mit , mal ohne Paramter ausprobieren.

    ./test.bash ->

    ./test.bash: Zeile 3: $1: Kann so nicht zuweisen.
    - 100
    +

    ./test.bash 200 ->

    = 200
    - 200
    + 100


    Bis zum nächsten Mal

    Keep it simple [,&] stupid

  • Ja, ich meinte mit dem Geheimnis geschweifte Klammer, dass ich es zuerst immer mit ( oder [ probiert habe und es nie ging. Dann nahm ich die { und es ging irgendwie. Dann konnte ich testen und dann war der -Wert der Richtige.
    Jetzt hab ich das nächste Problem. Jetzt frag ich den Wert ab (if [ $(echo "if (${var2} > $1) 1 else 0" | bc) -eq 1 ]) dann kann ich abfragen was ich will nie treffend. Ich meine die Variable $1 hat z.B. 500 und die var2 ist 485,63 (Gleitkomma, deshalb mit bc).
    Wenn aber die Variable mitgegeben wurde geht die Abfrage, nur nicht wenn mit echo{1:-500} gesetzt wurde. Hab auch schon echo${1:-500.00} probiert.
    Da liegt der Teufel wieder im Detail.:idea:
    eiermann1

  • echo {1:-500}

    weist der der Variablen 1 keinen Wert zu. Die Zeile gibt 500 aus, wenn kein Parameter übergeben wurde.

    mal testen mit

    Bash
    #!/bin/bash
    
    
    echo ${1:-500}
    echo $1
    param1=${1:-500}
    echo $param1


    Edit, weil fast vergessen:

    Die Shell kennt keine Typisierung

    var1=12
    var2=12.3
    var3=12,3

    eine davon ist keine Zahl

    Keep it simple [,&] stupid

    Einmal editiert, zuletzt von kungel (3. Mai 2013 um 13:52)

  • Hallo kungel
    ja perfekt. Jetzt läufts.
    Danke nochmal.
    Klasse Forum !!:)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!