用参数编写脚本?


11

我想编写一个带参数的shell脚本,然后将其应用于文件。

具体来说,我想给出一个术语,然后使用mxmlc(“ mxmlc term.as”)编译term.as,然后使用flashplayerdebugger(“ flashplayerdebugger term.swf”)运行term.swf。我对Shell脚本非常陌生-有什么想法吗?


$2是第一个参数,$3第二个,依此类推。 $1保留为文件名。至于其他东西,我不太明白你的意思。您能尝试更好地解释它还是写一些伪代码?
Fouric

1
@InkBlend,您一口气。"$1"是第一个论点。
geirha

@geirha:哎呀。好痛 你说的没错,当然。愚蠢的我,我一定一直在想Python。
Fouric

Answers:


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".asand即可flashplayerdebugger "$1".swf。(行情可以在表达式内。)
Eliah Kagan 2012年

但是如果参数包含空格怎么办?
戴维

你说得很对。我已编辑我的评论以解决此错误。
伊利亚·卡根

@shinnra如果参数包含空格,则nxmlcflashplayerdebugger将获得多个参数而不是预期的一个参数。扩展NAME需要双引号。附带说明一下,不要使用所有大写的变量名。您可能会覆盖特殊的Shell变量或环境变量。
盖尔哈,2012年

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”,在其后侧为“ and that all”。该变量将在字符串内部扩展,包括空格。如果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"

玩得开心!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.