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
Systemvariable testen
-
eiermann1 -
26. April 2013 um 20:52 -
Erledigt
-
-
Systemvariable testen? Schau mal ob du hier fündig wirst!
-
du brauchst das $zeichen nur zum auslesen glaub ich:
variable belegen:
1=200variable auslesen
echo $1 -
du brauchst das $zeichen nur zum auslesen glaub ich:variable belegen:
1=200variable auslesen
echo $1Hallo so gehts auch nicht.
Wenn dann eh 1:=200. Dann kommt Kommando nicht gefunden.
eiermann1 -
mach ohne das kolon
edit: ich hab deine frage nicht richtig gelesen.. kann man zahlen als variable überhaupt benutzen?
-
sicher gehen Zahlen, mit 16#1A oder 0x1A (bash) hast du sogar die Hexadezimal-Zahl 1A.
fehler von eiermann1 war der Doppelpunkt. -
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 beginnenaber 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. -
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.
-
meinst du vielleichtecho ${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
Mal mit , mal ohne Paramter ausprobieren.
./test.bash ->
./test.bash: Zeile 3: $1: Kann so nicht zuweisen.
- 100
+./test.bash 200 ->
= 200
- 200
+ 100Bis zum nächsten Mal
-
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
Mal mit , mal ohne Paramter ausprobieren.
./test.bash ->
./test.bash: Zeile 3: $1: Kann so nicht zuweisen.
- 100
+./test.bash 200 ->
= 200
- 200
+ 100Bis zum nächsten Mal
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
Edit, weil fast vergessen:
Die Shell kennt keine Typisierung
var1=12
var2=12.3
var3=12,3eine davon ist keine Zahl
-
echo {1:-500}weist der der Variablen 1 keinen Wert zu. Die Zeile gibt 500 aus, wenn kein Parameter übergeben wurde.
mal testen mit
Edit, weil fast vergessen:
Die Shell kennt keine Typisierung
var1=12
var2=12.3
var3=12,3eine davon ist keine Zahl
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!