Skripte mit Argumenten schreiben?

11

Ich möchte ein Shell-Skript schreiben, das ein Argument akzeptiert und es dann auf Dateien anwendet.

Insbesondere möchte ich einen Begriff angeben und ihn dann mit mxmlc ("mxmlc term.as") kompilieren lassen und dann term.swf mit flashplayerdebugger ("flashplayerdebugger term.swf") ausführen. Ich bin ziemlich neu im Shell-Scripting - irgendwelche Gedanken?

Southpointingchariot
quelle
$2ist das erste Argument, $3das zweite und so weiter. $1ist für den Namen der Datei reserviert. Was die anderen Sachen betrifft, verstehe ich nicht ganz, was du meinst. Könnten Sie bitte versuchen, es etwas besser zu erklären oder einen Pseudocode zu schreiben?
Fouric
1
@InkBlend du bist um eins weg. "$1"ist das erste Argument.
Geirha
@geirha: Autsch. Das tut weh. Du hast natürlich recht. Dumm von mir, ich muss an Python gedacht haben.
Fouric

Antworten:

19

Sie könnten so etwas verwenden:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf
Dawid
quelle
1
Oder überspringen Sie die NAMEVariable ganz und verwenden Sie einfach mxmlc "$1".asund flashplayerdebugger "$1".swf. (Zitate können in Ausdrücken enthalten sein.)
Eliah Kagan
aber was ist, wenn der Parameter Leerzeichen enthält?
Dawid
Du liegst richtig. Ich habe meinen Kommentar bearbeitet, um diesen Fehler zu beheben.
Eliah Kagan
@shinnra Wenn die Parameter Leerzeichen enthalten, dann nxmlcund flashplayerdebuggerwird mehrere Argumente erhalten , anstatt das ein Argument bestimmt. Die Erweiterung von NAMEmuss in doppelte Anführungszeichen gesetzt werden. Nebenbei bemerkt, verwenden Sie nicht alle Variablennamen in Großbuchstaben. Sie riskieren, spezielle Shell-Variablen oder Umgebungsvariablen zu überschreiben.
Geirha
4

Ich empfehle auch, das Variablennamen-Trennzeichen zu verwenden. Der Code würde also so aussehen:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc ${NAME}.as
flashplayerdebugger ${NAME}.sw

Dies ermöglicht die Verwendung der Variablen in jedem Kontext, auch in anderen Texten. Beispielsweise:

NewName="myFileIs${NAME}and that is all"

Dies würde die Variable NAME erweitern, die vorne von "myFileIs" und hinten von "und das ist alles" flankiert wird. Die Variable würde sich erweitern, einschließlich Leerzeichen, innerhalb der Zeichenfolge. Wenn NAME "hier drinnen" wäre, wäre der neue Name "myFileIsinside hereand das ist alles".

Die Befehlszeile kann bis zu 9 Variablen aufnehmen. Es können Zeichenfolgen in Anführungszeichen gesetzt werden, die Leerzeichen enthalten. Jede Zeichenfolge in Anführungszeichen zählt als Variable. Sowie:

./myProg var1 var 2 var3

So ${1}ist "var1", ${2}ist "var", ${3}ist "2", ${4}ist"var3"

ABER: ./myProg var1 "var 2" var3

hat ${1}ist "var1", ${2}ist "var 2", ${3}ist"var3"

Habe Spaß!

Hey Gary
quelle