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

问题描述 投票:2回答:3

我试过通过命令行参数将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”。

有关如何做到这一点的任何帮助?

提前致谢。

linux bash shell command command-line-arguments
3个回答
4
投票

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。这就是为什么你能够在代码中使用这些变量的原因。


2
投票
#!/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将包含第二个参数。

© www.soinside.com 2019 - 2024. All rights reserved.