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

use*_*319 9 linux bash shell command command-line-arguments

我尝试通过命令行参数将 shell 变量传递给 shell 脚本。

下面是在 shell 脚本中编写的命令。

LOG_DIRECTORY="${prodName}_${users}users"
mkdir -m 777 "${LOG_DIRECTORY}"
Run Code Online (Sandbox Code Playgroud)

我尝试将其运行为:

prodName='DD' users=50 ./StatCollection_DBServer.sh
Run Code Online (Sandbox Code Playgroud)

该命令工作正常并根据我的要求创建目录。但问题是我不想执行下面提到的 shell 脚本。

相反,我想像这样运行它

DD 50 ./StatCollection_DBServer.sh

脚本变量应仅从此处获取值,并且将创建的目录将为“DD_50users”。

关于如何执行此操作有任何帮助吗?

提前致谢。

Tha*_*awn 9

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

./StatCollection_DBServer.sh DD 50
Run Code Online (Sandbox Code Playgroud)

在脚本内部,您可以访问 $1 和 $2 变量,因此脚本如下所示:

#!/bin/bash
LOG_DIRECTORY="${1}_${2}users"
mkdir -m 777 "${LOG_DIRECTORY}"
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助...

编辑:只是一个小解释,你的方法中发生了什么:

prodName='DD' users=50 ./StatCollection_DBServer.sh
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以在调用脚本之前prodName设置环境变量。users这就是为什么您能够在代码中使用这些变量。


Has*_*san 5

#!/bin/sh    
prodName=$1
users=$2
LOG_DIRECTORY="${prodName}_${users}users"
echo $LOG_DIRECTORY
mkdir -m 777 "$LOG_DIRECTORY"
Run Code Online (Sandbox Code Playgroud)

并这样称呼它:

chmod +x script.sh
./script.sh DD 50
Run Code Online (Sandbox Code Playgroud)