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”。
关于如何执行此操作有任何帮助吗?
提前致谢。
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这就是为什么您能够在代码中使用这些变量。
#!/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)