gpt4 book ai didi

java - 为参数化变量创建 shell 脚本

转载 作者:行者123 更新时间:2023-12-02 01:06:03 24 4
gpt4 key购买 nike

我对 shell 脚本非常陌生,我想创建并运行 shell 脚本。

我想在两个不同的环境中运行我的java程序,即simu和prod。

如果我在 simu 环境中运行程序,则执行 SIMU_RUN,否则执行 PROD_RUN。

例如,我有两个目录,文件放置在 /data/etl-simu/in/ 中和/data/etl-prod/in/正如您所看到的,在从目录名称读取文件时,我可以从 SIMU_PATH 识别环境是 simu 还是 prod或PROD_PATH变量。

我不确定编写这样的shell脚本并执行它是否容易。

如果我只是创建普通的 shell 脚本并输入完整的 SIMU_RUNPROD_RUN该 shell 脚本中的路径并在相应的环境中执行它,然后它将正常运行。但由于我有两个环境,所以我想让这个 shell 脚本变得灵活,而不是为 simu 和 prod 创建两个单独的 shell 脚本

#!/bin/sh

SIMU_RUN="cd /opt/env/import/import/current; java -Dlog4j.configurationFile=/opt/import/config/logging/log4j2_Importer.xml -Djava.security.egd=file:///dev/urandom -classpath /opt/runner/lib/*:/opt/import/lib/* runner.Application --config /opt/import/config/import.simu.properties --workflow import --inputDir /data/etl-simu/in"
PROD_RUN="cd /opt/import/import/current; java -Dlog4j.configurationFile=/opt/import/config/logging/log4j2_Importer.xml -Djava.security.egd=file:///dev/urandom -classpath /opt/runner/lib/*:/opt/import/lib/* runner.Application --config /opt/import/config/import.prod.properties --workflow import --inputDir /data/etl-prod/in"

SIMU_PATH="/data/etl-simu/in"
PROD_PATH="/data/etl-prod/in"

MODE=$1

if [ "${MODE}" = SIMU_PATH ]; then

#execute SIMU_RUN

else
#execute PROD_RUN


fi

exit ${EXIT}

最佳答案

不要将代码存储在变量中,使用函数:

#!/bin/sh

run() {
cd /opt/import/import/current &&
java -Dlog4j.configurationFile=/opt/import/config/logging/log4j2_Importer.xml \
-Djava.security.egd=file:///dev/urandom \
-classpath /opt/runner/lib/*:/opt/import/lib/* \
runner.Application \
--config "/opt/import/config/import.${mode}.properties" \
--workflow import \
--inputDir "/data/etl-${mode}/in"
}

mode=$1

case "$mode" in
prod|simu)
run
;;
*) echo "error: invalid mode" >&2
exit 1
;;
esac

注释:

  • 改掉使用全大写变量名的习惯,将它们保留为 shell 保留的名称。有一天你会写 PATH=something 然后 wonder why your script is broken .
  • 我用行延续来分解很长的行:这将使可维护性变得更加容易。
<小时/>

如果你把它设为 脚本,那么在我看来就更好了:

run() {
local -a java_options=(
-Dlog4j.configurationFile=/opt/import/config/logging/log4j2_Importer.xml
-Djava.security.egd=file:///dev/urandom
-classpath "/opt/runner/lib/*:/opt/import/lib/*"
)
local app="runner.Application"
local -a app_options=(
--config "/opt/import/config/import.${mode}.properties"
--workflow import
--inputDir "/data/etl-${mode}/in"
)

cd /opt/import/import/current &&
java "${java_options[@]}" $app "${app_options[@]}"
}

关于java - 为参数化变量创建 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60062123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com