Systemvariable testen

  • 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


  • Hallo so gehts auch nicht.
    Wenn dann eh 1:=200. Dann kommt Kommando nicht gefunden.
    eiermann1

  • sicher gehen Zahlen, mit 16#1A oder 0x1A (bash) hast du sogar die Hexadezimal-Zahl 1A.
    fehler von eiermann1 war der Doppelpunkt.

    Keep it simple [,&] stupid

  • 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:


    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Benedict Torvalds, 28.9.2003


    Hast Du die Woche schon Deine Raspberry gesichert =O Bei mir tut das raspiBackup automatisch ;)

  • Quote


    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


  • 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

    Edited once, last by kungel ().


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