Escrevendo scripts com argumentos?

11

Quero escrever um script de shell que use um argumento e o aplique aos arquivos.

Especificamente, quero dar um termo e depois compilá-lo term.as com mxmlc ("mxmlc term.as"), depois execute term.swf com flashplayerdebugger ("flashplayerdebugger term.swf"). Eu sou bastante novo para scripts de shell - alguma opinião?

southpointingchariot
fonte
$2é o primeiro argumento, $3o segundo e assim por diante. $1está reservado para o nome do arquivo. Quanto às outras coisas, não entendo bem o que você quer dizer. Você poderia tentar explicar um pouco melhor ou escrever algum código psued?
Fouric
1
@InkBlend, você está de folga. "$1"é o primeiro argumento.
Geirha 17/08
@geirha: Ai. Isso machuca. Você está certo, é claro. Bobo, eu devia estar pensando em Python.
fouric 17/08/2012

Respostas:

19

Você poderia usar algo como isto:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf
Dawid
fonte
1
Ou pule a NAMEvariável completamente e use mxmlc "$1".ase flashplayerdebugger "$1".swf. (Cotações pode estar dentro de expressões.)
Elias Kagan
mas e se o parâmetro contiver espaços?
Dawid
Você está certo. Eu editei meu comentário para corrigir este erro.
Eliah Kagan
@shinnra Se o parâmetro contiver espaços, em seguida, nxmlce flashplayerdebuggervai ter vários argumentos em vez do pretendido um argumento. A expansão das NAMEnecessidades precisa ser citada duas vezes. Em uma nota lateral, não use todos os nomes de variáveis ​​em maiúsculas; você corre o risco de substituir variáveis ​​especiais do shell ou variáveis ​​de ambiente.
geirha
4

Eu também recomendo que você use o delimitador de nome de variável. Portanto, o código ficaria assim:

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

Isso permite o uso da variável em qualquer contexto, mesmo dentro de outro texto. Por exemplo:

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

Isso expandiria a variável NAME, que seria flanqueada na frente por "myFileIs" e na parte traseira com "e isso é tudo". A variável expandiria, incluindo espaços, dentro da cadeia. se NAME estivesse "aqui dentro", o NewName seria "myFileIsinside hereand that is all".

A linha de comando pode levar até 9 variáveis. Eles podem ser strings entre aspas que contêm espaços em branco, cada string entre aspas conta como uma variável. Tal como:

./myProg var1 var 2 var3

Então ${1}é "var1", ${2}é "var", ${3}é "2", ${4}é"var3"

MAS: ./myProg var1 "var 2" var3

tem ${1}é "var1", ${2}é "var 2", ${3}é"var3"

Diverta-se!

Hey Gary
fonte