如何将shell变量作为命令行参数传递给shell脚本

9
我尝试通过命令行参数将shell变量传递给shell脚本。
以下是在shell脚本中编写的命令。
LOG_DIRECTORY="${prodName}_${users}users"
mkdir -m 777 "${LOG_DIRECTORY}"

我正在尝试运行以下内容:

prodName='DD' users=50 ./StatCollection_DBServer.sh

这条命令按照我的要求正常工作并创建了目录。但问题是,我不想像下面提到的那样执行shell脚本。

相反,我想像这样运行它

DD 50 ./StatCollection_DBServer.sh

脚本变量应该只从这里获取值,并且将创建的目录是"DD_50users"。

有关如何实现此操作的任何帮助?

提前感谢。


你不能按照你想要的方式去做。Bash不是那样工作的。Bash会查看第一个单词'DD',并认为那是命令,之后的每个单词都是DD的参数。你需要遵循Ansurul的建议,或者像将DD变成你的shell脚本这样做一些有趣的事情。 - Bitdiot
3个回答

9

Bash脚本在调用脚本之后才接受参数,因此您需要像这样调用脚本:

./StatCollection_DBServer.sh DD 50

在脚本内部,您可以使用 $1 和 $2 访问变量,因此脚本可能如下所示:
#!/bin/bash
LOG_DIRECTORY="${1}_${2}users"
mkdir -m 777 "${LOG_DIRECTORY}"

我希望这能有所帮助...
编辑: 简单解释一下,你的操作过程中发生了什么事情:
prodName='DD' users=50 ./StatCollection_DBServer.sh

在这种情况下,在调用脚本之前,您需要设置环境变量prodNameusers。这就是为什么您能够在代码中使用这些变量的原因。

1
如果这是你的问题的正确答案,请接受它。谢谢! - Thawn
是的@ Thawn,我采纳了你的建议。现在它工作得很好。谢谢你。 :-) - user3627319

5
#!/bin/sh    
prodName=$1
users=$2
LOG_DIRECTORY="${prodName}_${users}users"
echo $LOG_DIRECTORY
mkdir -m 777 "$LOG_DIRECTORY"

并且像这样调用:

chmod +x script.sh
./script.sh DD 50

2

只需像这样调用: sh script.sh DD 50

该脚本将读取命令行参数:

prodName=$1
users=$2
LOG_DIRECTORY="${prodName}_${users}users"
mkdir -m 777 "$LOG_DIRECTORY"

这里$1将包含第一个参数,$2将包含第二个参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接