Jasson J. schrieb:
> Hallo zusammen,
>
> ich mache einen Einstiegskurs Linux und versuche einige Beispiele aus
> den Unterlagen nach zu vollziehen.
Klingt nach einem Kurs wo der Macher demonstrieren will was für ein
toller Hecht er ist.
> 1) ${DEBUG:+echo "argv: " $@}
Wenn DEBUG null ist oder nicht gesetzt passiert nichts.
In allen anderen Fällen wird der gesamte Klammer-Ausdruck ${...} durch
den Teil nach dem ":+" ersetzt. Dabei wird auch $@ zur Liste der
Aufrufparameter expandiert ($@ ist eine spezielle Shell-Variable die
diese Liste enthält). Also in etwa
1 | echo "argv: " "<parameter>..."
|
Das wiederum, weil ${...} syntaktisch dort steht wo man ein Kommando
schreiben würde, wird also Kommando ausgeführt. echo gibt einfach
Strings auf der Konsole aus. Dann steht auf der Konsole so was wie
Ziemlich miese Nummer das einem Anfänger vorzusetzen.
> 2) firstarg=${1:?usage $0 arg1 [arg2]}
Erster Aufrufparameter wird auf Vorhandensein getestet. Wenn leer oder
nicht vorhanden wird eine Fehlermeldung "usage <script path/name> arg1
[arg2]" ausgegeben und das Skript abgebrochen.
Wenn vorhanden und nicht leer erhält firstarg den Wert des ersten
Aufrufparameters.
Auch ziemlich übel für Anfänger.
>zu 1) und wie ich es mir aus meinen Unterlagen "zusammendenken"
> DEBUG ist die variable, :+ ist ein Shellausdruck
Nicht ganz. ":+" ist eine von diversen speziellen Parameter Expansions.
Es muss in ${...} stehen. Es ist kein eigenständiger Shellausdruck.
> Ich habe keine Vorstellung, was echo "argv: " $@ sein sollte - nur, das
> echo etwas ausgibt, aber damit komme ich gedanklich nicht weiter
"argv: " ist ein String und wird so ausgegeben wie er da steht.
$@ ist eine spezielle Shellvariable die die Liste der
Kommandozeilen-Argumente enthält mit dem das Skript aufgerufen wurde.
> firstarg ist eine Variable, die mit einem Wert versehen wird, der mit
> ${....} referenziert wird.
> 1 dürfte die Shell-Variable 1 also das erste Argument sein, was von :?
> geliefert wird, falls die Variable 1 nicht NULL ist, sonst wird
> usage $0 arg1 [arg2] geliefert.
Fast, "usage $0 arg1 [arg2]" wird nicht geliefert sondern ausgegeben
wenn $1 nicht da ist oder leer. Der Variablen firstarg wird in dem Fall
nichts zugewiesen, sondern das Skript beendet.
:? ist eine ganz spezielle Parameter Expansion mit diesen
Seiteneffekten.
$0 ist der Name und Pfad des Skripts.