Scrivere script con argomenti?


11

Voglio scrivere script di shell che accetta un argomento e quindi lo applica ai file.

In particolare, voglio dare un termine, e poi farlo compilare term.as con mxmlc ("mxmlc term.as"), quindi eseguire term.swf con flashplayerdebugger ("flashplayerdebugger term.swf"). Sono abbastanza nuovo con gli script di shell: hai qualche idea?


$2è il primo argomento, $3il secondo e così via. $1è riservato per il nome del file. Per quanto riguarda le altre cose, non capisco bene cosa intendi. Potresti provare a spiegarlo un po 'meglio o scrivere un codice psued?
Fouric

1
@InkBlend sei fuori di testa. "$1"è il primo argomento.
geirha,

@geirha: Ouch. Fa male. Hai ragione, ovviamente. Stupido, devo aver pensato a Python.
Fouric

Risposte:


19

Puoi usare qualcosa del genere:

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

1
O salta del NAMEtutto la variabile e basta usare mxmlc "$1".ase flashplayerdebugger "$1".swf. (Le citazioni possono essere all'interno di espressioni.)
Eliah Kagan,

ma cosa succede se il parametro contiene spazi?
Dawid,

Hai ragione. Ho modificato il mio commento per correggere questo errore.
Eliah Kagan,

@shinnra Se il parametro contiene spazi, quindi nxmlce flashplayerdebuggeravranno più argomenti, invece di quello che si sta un argomento. L'espansione delle NAMEesigenze deve essere racchiusa tra virgolette doppie. In una nota a margine, non usare tutti i nomi di variabili maiuscole; si rischia di sovrascrivere variabili di shell speciali o variabili di ambiente.
geirha,

4

Consiglio anche di usare il delimitatore del nome variabile. Quindi il codice sarebbe simile a:

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

Ciò consente l'uso della variabile in qualsiasi contesto, anche all'interno di altro testo. Per esempio:

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

Ciò espanderebbe la variabile NAME che sarebbe fiancheggiata da "myFileIs" e sul retro con "e questo è tutto" La variabile si espanderebbe, spazi inclusi, all'interno della stringa. se NAME fosse "dentro qui" il NewName sarebbe "myFileIsinside hereand that that".

La riga di comando può contenere fino a 9 variabili. Possono essere stringhe tra virgolette che contengono spazi vuoti, ogni stringa tra virgolette conta come una variabile. Ad esempio:

./myProg var1 var 2 var3

Così ${1}è "var1", ${2}è "var", ${3}è "2", ${4}è"var3"

MA: ./myProg var1 "var 2" var3

ha ${1}è "var1", ${2}è "var 2", ${3}è"var3"

Divertiti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.