bash - 如何在 shell 脚本中提供参数
问题描述
我有下面的 shell 脚本,我想在其中创建另一个参数,而不是in
在$JAVA_BIN $JAVA_OPTS --workflow test_method --config config/dbimport.$1.properties in
我想提供该参数的行中。
#!/bin/bash
if [[ $# -lt 1 ]]; then
echo "usage: test_method_full.sh <env> ; whereas env is one of dev|simu|prod"
exit 1
fi
# ******************** Check arguments **********
if [[ $1 != "dev" && $1 != "simu" && $1 != "prod" ]]; then
echo "env parameter has to be dev, simu or prod. Found ${1}"
exit 3
fi
# ***************** Java-Environment **************
# use given JAVA_HOME or openjava-1.8 if available
if [[ -z ${JAVA_HOME} ]]; then
# JAVA_HOME does not exist
if [[ -d /opt/java-1.8 ]]; then
JAVA_HOME=/opt/java-1.8
else
echo "JAVA_HOME could not be determined!"
exit 5
fi
fi
# set the Java binary based on JAVA_HOME
JAVA_BIN=${JAVA_HOME}/bin/java
$JAVA_BIN $JAVA_OPTS -classpath "/opt/Software/lib/*:/opt/Software/test_method/lib/*" --workflow test_method --config config/dbimport.$1.properties in
运行脚本时,它应该运行如下:
test_method_full.sh simu /opt/Software/in
我不想/opt/Software/in/
在我的 shell 脚本中硬编码并在运行脚本时让它可以更改
解决方案
您可以选择将其作为可选参数传递(即"${2:-/opt/Software/in/}"
),它可以覆盖默认值,但使用默认值,如果您不传递参数,或者为其使用环境变量,例如:"${JAVA_ARG:-/opt/Software/in/}"
,以类似的方式您是已经这样做了JAVA_OPTS
。
推荐阅读
- machine-learning - 生成相对于各个实体的嵌入关系/边缘值的上下文样本?
- .net - 为什么我必须不断重新安装 Microsoft Access 数据库引擎才能运行我的应用程序?
- java - 无法停止/更新处理程序(removeCallbacksAndMessages)
- javascript - 在javascript中更改颜色
- python - Scapy ARP 错误
- android - 反应原生桥 - 从 android 视图类发出事件
- python - 如何解决无效 RSA 条件的问题?
- python - python pandas迭代两个不同列的行并返回重复的一次和单行中重复值的对应值
- oracle - 关于 UTL_HTTP.set_wallet 参数文件位置的问题
- android - Android 网络链接需要两次尝试才能将注意力集中在电视上