首页 > 解决方案 > 如何在 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 脚本中硬编码并在运行脚本时让它可以更改

标签: bashshellparameters

解决方案


您可以选择将其作为可选参数传递(即"${2:-/opt/Software/in/}"),它可以覆盖默认值,但使用默认值,如果您不传递参数,或者为其使用环境变量,例如:"${JAVA_ARG:-/opt/Software/in/}",以类似的方式您是已经这样做了JAVA_OPTS


推荐阅读