Написання сценаріїв з аргументами?


11

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

Зокрема, я хочу дати термін, а потім скомпілювати термін.as з mxmlc ("mxmlc term.as"), потім запустити term.swf з flashplayerdebugger ("flashplayerdebugger term.swf"). Я досить новачок сценаріїв оболонок - якісь думки?


$2це перший аргумент, $3другий тощо. $1зарезервовано для імені файлу. Щодо інших речей, я не зовсім розумію, що ви маєте на увазі. Не могли б ви спробувати пояснити це трохи краще або написати якийсь псуедокод?
чотирирічний

1
@InkBlend ви одне. "$1"є першим аргументом.
geirha

@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

1
Або пропустити NAMEзмінну взагалі і просто використовувати mxmlc "$1".asі flashplayerdebugger "$1".swf. (Цитати можуть бути всередині виразів.)
Елія Каган

але що робити, якщо парам містить пробіли?
Dawid

Ви абсолютно праві. Я відредагував свій коментар, щоб виправити цю помилку.
Елія Каган

@shinnra Якщо параметр містить пробіли, то nxmlcі flashplayerdebuggerотримає кілька аргументів замість призначеного одного аргументу. Розширення NAMEпотреб потрібно подвоїти. У бічній примітці не використовуйте всі великі імена змінних; ви ризикуєте перезаписати спеціальні змінні оболонки або змінні середовища.
geirha

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, отже це все".

Командний рядок може містити до 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"

Веселіться!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.