Écrire des scripts avec des arguments?

11

Je veux écrire un script shell qui prend un argument, puis l'applique aux fichiers.

Plus précisément, je veux donner un terme, puis le faire compiler term.as avec mxmlc ("mxmlc term.as"), puis exécuter term.swf avec flashplayerdebugger ("flashplayerdebugger term.swf"). Je suis assez nouveau dans l'écriture de scripts shell - des réflexions?

Southpointingchariot
la source
$2est le premier argument, $3le second, etc. $1est réservé au nom du fichier. Quant aux autres choses, je ne comprends pas très bien ce que vous voulez dire. Pourriez-vous s'il vous plaît essayer de l'expliquer un peu mieux ou écrire un pseudo-code?
fouric
1
@InkBlend vous êtes parti par un. "$1"est le premier argument.
geirha
@geirha: Ouch. Ça fait mal. Vous avez raison, bien sûr. Idiot, j'ai dû penser à Python.
fouric

Réponses:

19

Vous pouvez utiliser quelque chose comme ceci:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf
Dawid
la source
1
Ou sauter la NAMEtout à fait variable et il suffit d' utiliser mxmlc "$1".aset flashplayerdebugger "$1".swf. (Citations peuvent être à l' intérieur des expressions.)
Eliah Kagan
mais que faire si le param contient des espaces?
Dawid
Tu as plutot raison. J'ai édité mon commentaire pour corriger cette erreur.
Eliah Kagan
@shinnra Si le paramètre contient des espaces, nxmlcet flashplayerdebuggerva obtenir plusieurs arguments au lieu de l'un argument destiné. L'expansion des NAMEbesoins à double cité. Sur une note de côté, ne pas utiliser tous les noms de variables en majuscules; vous risquez d' écraser des variables shell spéciales ou des variables d'environnement.
geirha
4

Je vous recommande également d'utiliser le nom de la variable delimiter. Ainsi, le code ressemblerait à ceci:

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

Ceci permet l'utilisation de la variable dans un contexte, même à l'intérieur d'autres textes. Par exemple:

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

Cela développerait la variable NAME qui serait flanquée devant par "myFileIs" et à l'arrière avec "et c'est tout" La variable se développerait, espaces compris, à l'intérieur de la chaîne. si NAME était "à l'intérieur d'ici", le NewName serait "myFileIsinside hereand et c'est tout".

La ligne de commande peut prendre jusqu'à 9 variables. Ils peuvent être cités chaînes qui contiennent des blancs, chaque compte chaîne entre guillemets comme une variable. Tel que:

./myProg var1 var 2 var3

${1}Est donc "var1", ${2}est "var", ${3}est "2", ${4}est"var3"

MAIS: ./myProg var1 "var 2" var3

a ${1}est "var1", ${2}est "var 2", ${3}est"var3"

S'amuser!

Hé Gary
la source