Variablendeklaration in einem Shellskript

integrale

Unauthorised User
Hallo allerseits,

ich habe mir heute das Skript k3b.SlackBuild von Slackware angeschaut. Auch wenn ich in Shellskript noch nicht so bewandert bin, verstehe ich das Skript soweit schon. Nur sind mir da zwei Variablendeklarationen aufgefallen, die ich so auch nicht in meinem Buch über Shell-Skript Programmierung finden konnte.
Und zwar folgende:

Code:
TMP=${TMP:-/tmp}
ARCH=${ARCH:-i486}

Ich habe das mal auf der Kommandozeile ausprobiert. Als Wert erhält man dann für TMP /tmp und für ARCH i486.
Wenn ich das wie folgt deklarieren würde wäre das doch das gleiche, oder nicht?

Code:
TMP='/tmp'
ARCH='i486'

Kann mir jemand sagen, was den Unterschied zwischen beiden Varianten ausmacht und warum man das ggf. wie im oberen Beispiel (k3b.SlackBuild) machen muß und ob das in allen Shells so funktioniert? Ich hab das nur mit der bash ausprobiert, im Skript steht aber die sh als ausführende Shell.

Danke schon mal!

Viele Grüße
integrale
 
Hm meine Vermutung hat sich bestätigt, /tmp und i486 sind hier die Default-Werte, die verwendet werden wenn TMP und ARCH nicht woanders schon gesetzt wurden.
Wo man dass nochmal genau nachlesen kann weiss ich jedoch nicht.
 
KingNothing schrieb:
Hm meine Vermutung hat sich bestätigt, /tmp und i486 sind hier die Default-Werte, die verwendet werden wenn TMP und ARCH nicht woanders schon gesetzt wurden.
Wo man dass nochmal genau nachlesen kann weiss ich jedoch nicht.
Das bedeutet, wenn ich im Skript nochmal an anderer Stelle diese Variable mit einem Wert belege, oder wenn ich vor Ausführung in der ausführenden Shell diese Variablen mit einem anderen Wert belegt habe, dann wird dieser default-Wert überschrieben.
Habe ich das soweit richtig verstanden?
Wenn ja, dann schon mal vielen dank!

Viele Grüße
integrale
 
integrale schrieb:
Das bedeutet, wenn ich im Skript nochmal an anderer Stelle diese Variable mit einem Wert belege
Dann wird der vorherige Wert sowieso überschrieben. (Wenn es an späterer Stelle geschied)

integrale schrieb:
enn ich vor Ausführung in der ausführenden Shell diese Variablen mit einem anderen Wert belegt habe, dann wird dieser default-Wert überschrieben.
Japp, so ist es.

Ich finde leider nichts darüber nicht im Bash Reference Manual, vielleicht kann jemand anderes Mal den Abschnitt posten.
 
KingNothing schrieb:
Ich finde leider nichts darüber nicht im Bash Reference Manual, vielleicht kann jemand anderes Mal den Abschnitt posten.
man bash: "Parameter Expansion"

${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion
of word is substituted. Otherwise, the value of parameter is sub-
stituted.
 
MrFixit schrieb:
"man bash", pffff :rolleyes:
sh(1) lesen sollte reichen.
1. Es ging hier (so wie ich das verstanden habe) um die bash.
2. Haettest du die Manpage zu `sh' gelesen, dann wuesstest du, dass dort genau das selbe steht. ;)
 
Ich _habe_ die manpage gelesen. Ich wollte nur verdeutlichen, dass FreeBSD an und fuer sich ausreichend dokumentiert ist. Da muss man kein Buch ueber Shellprogrammierung befragen, noch die Dokumentation von Drittsoftware.

Und ich war der Meinung es geht um /bin/sh, siehe OP.
 
Code:
${variable:-wort}

ist das selbe wie:


if variable (mit Nicht-Nullwert) gesetzt
then $variable
else die mit wort angegebene Zeichenkette.
fi

Quelle: H. Herold: Linux/Unix Shells
 
wozu solchen umstaendlichen pseudo-code als dokumentation? gibts irgendjemanden, der mit der folgenden passage aus man sh probleme hat?

Code:
     ${parameter:-word}    Use Default Values.  If parameter is unset or null,
                           the expansion of word is substituted; otherwise,
                           the value of parameter is substituted.

ach ja, wenn sowas nicht in einem buch ueber shell-programmierung auf anhieb zu finden ist, wuerde ich das buch entsorgen. :P
 
Vielen Dank nochmal für die vielen Antworten, sie haben mir sehr geholfen.

Ihr müßt euch wegen mir aber jetzt nicht über irgendwelchen "Pseudo-Code", oder wer die beste Antwort geliefert hat streiten. Mir haben alle Antworten geholfen. Und selbst wenn es nicht so wäre, würde ich mich über jede Antwort, welche wenigstens den Versuch beabsichtigt, mir zu helfen, freuen.

@TCM: Welches Buch zur Shellprogrammierung würdest du mir denn empfehlen?

Gruß
integrale
 
Zurück
Oben