Написание скриптов с аргументами?

11

Я хочу написать сценарий оболочки, который принимает аргумент, а затем применяет его к файлам.

В частности, я хочу дать термин и затем скомпилировать term.as с помощью mxmlc («mxmlc term.as»), затем запустить term.swf с flashplayerdebugger («flashplayerdebugger term.swf»). Я довольно новичок в написании сценариев оболочки - есть мысли?

southpointingchariot
источник
$2это первый аргумент, $3второй и так далее. $1зарезервировано для имени файла. Что касается других вещей, я не совсем понимаю, что вы имеете в виду. Не могли бы вы попытаться объяснить это немного лучше или написать псевдокод?
четверг
1
@InkBlend вы выключены одним. "$1"это первый аргумент.
гейра
@geirha: Ой. Это больно. Вы правы, конечно. Глупый я, должно быть, я думал о Питоне.
четверг,

Ответы:

19

Вы можете использовать что-то вроде этого:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf
Dawid
источник
1
Или NAMEвообще пропустите переменную и просто используйте mxmlc "$1".asи flashplayerdebugger "$1".swf. (Цитаты могут быть внутри выражений.)
Элия ​​Каган
но что, если парам содержит пробелы?
Давид
Ты совершенно прав. Я отредактировал свой комментарий, чтобы исправить эту ошибку.
Элия ​​Каган
@shinnra Если параметр содержит пробелы, то nxmlcи flashplayerdebuggerполучит несколько аргументов вместо предполагаемого одного аргумента. Расширение NAMEдолжно быть в двойных кавычках. Кстати, не используйте все имена переменных в верхнем регистре; вы рискуете перезаписать специальные переменные оболочки или переменные окружения.
Гейра
4

Я также рекомендую использовать разделитель имени переменной. Таким образом, код будет выглядеть так:

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

Это позволяет использовать переменную в любом контексте, даже внутри другого текста. Например:

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

Это расширило бы переменную NAME, которая была бы впереди с «myFileIs», а сзади с «и это все». Переменная расширилась бы, включая пробелы, внутри строки. если бы NAME находился «внутри здесь», NewName было бы «myFileIsinside here here, и это все».

Командная строка может принимать до 9 переменных. Это могут быть строки в кавычках, содержащие пробелы, каждая строка в кавычках считается переменной. Такие как:

./myProg var1 var 2 var3

Так ${1}есть "var1", ${2}есть "var", ${3}есть "2", ${4}есть"var3"

НО: ./myProg var1 "var 2" var3

есть ${1}это "var1", ${2}это "var 2", ${3}это"var3"

Веселиться!

Эй гэри
источник