Bash编程传递参数

Bash编程传递参数,bash,Bash,我目前正在学习bash编程,但我不太明白为什么对我来说,这个简单的论点不起作用 我有一个这样的剧本 #!/bin/bash # the following environment variables must be set before running this script # SIM_DIR name of directory containing armsim # TEST_DIR name of the directory containing this script and the e

我目前正在学习bash编程,但我不太明白为什么对我来说,这个简单的论点不起作用

我有一个这样的剧本

#!/bin/bash
# the following environment variables must be set before running this script
# SIM_DIR name of directory containing armsim
# TEST_DIR name of the directory containing this script and the expected outputs
# LOG_DIR name of the directory that your output is written to by the run_test2 script
# ARMSIM_VERBOSE set to "-v" for verbose logging or leave unset

# First check the environment variables are set
giveup=0
if [[ ${#SIM_DIR} -eq 0 || ${#TEST_DIR} -eq 0 || ${#LOG_DIR} -eq 0 ]] ; then
    echo One or more of the following environment variables must be set:
    echo SIM_DIR, TEST_DIR, LOG_DIR
    giveup=1
fi

# Now check the verbose flag
if [[ ${#ARMSIM_VERBOSE} != 0 && "x${ARMSIM_VERBOSE}" != "x-v" ]] ; then
    echo ARMSIM_VERBOSE must be unset, empty or set to -v
    giveup=1
fi

# Stop if environment is not set up
if [ ${giveup} -eq 1 ] ; then
    exit 0
fi

cd ${TEST_DIR}
for i in test2-*.sh; do
  echo "**** Running test ${i%.sh} *****"
  ./$i > ${LOG_DIR}/${i%.sh}.log
done
当我运行.sh文件并传入3个示例参数时,如下所示:-

$。/运行\u test2 SIM\u DIR TEST\u DIR LOG\u DIR

它仍然显示:
必须设置以下一个或多个环境变量:
模拟目录、测试目录、日志目录


谁能给我指点一下吗?谢谢。

这不是它的工作原理。环境变量必须在脚本或终端中预先设置

export SIM_DIR=/home/someone/simulations
export TEST_DIR=/home/someone/tests
export LOG_DIR=/home/someone/logs

./run_test2

如果您经常使用这些变量,您可能希望在
~/.bashrc
中导出它们。语法与上例中的导出相同。

这不是它的工作原理。环境变量必须在脚本或终端中预先设置

export SIM_DIR=/home/someone/simulations
export TEST_DIR=/home/someone/tests
export LOG_DIR=/home/someone/logs

./run_test2

如果您经常使用这些变量,您可能希望在
~/.bashrc
中导出它们。语法与上例中的导出相同。

环境变量不是我从您的问题/示例中理解的真正参数。在我看来,您似乎想要为函数/脚本提供参数,如果您这样做,您可以在$1-9中找到您的参数(我认为bash支持更多,不确定),参数的数量存储在$#

需要两个参数的函数示例:

my_func() {
    if [ $# -ne 2 ]; then
        printf "You need to give 2 arguments\n"
        return
    fi

    printf "Your first argument: %s\n" "$1"
    printf "Your second argument: $s\n" "$2"
}

# Call the functionl like this
my_func arg1 arg2

从您的问题/示例中我了解到,环境变量并不是真正的参数。在我看来,您似乎想要为函数/脚本提供参数,如果您这样做,您可以在$1-9中找到您的参数(我认为bash支持更多,不确定),参数的数量存储在$#

需要两个参数的函数示例:

my_func() {
    if [ $# -ne 2 ]; then
        printf "You need to give 2 arguments\n"
        return
    fi

    printf "Your first argument: %s\n" "$1"
    printf "Your second argument: $s\n" "$2"
}

# Call the functionl like this
my_func arg1 arg2

你甚至设置了环境变量吗?环境变量并不是我从你的问题/例子中理解的真正的参数。在我看来,您似乎想为函数/脚本提供参数,如果这样做,您可以在$1-9中找到参数(我认为bash支持更多,不确定),参数的数量存储在$#。@Jite-对。听起来你可以把它充实成另一个答案。一种使用参数而不是环境变量的方法。@ArjunShankar-刚刚做了,用一个简单的例子,谢谢。你甚至设置了环境变量吗?环境变量并不是我从你的问题/例子中理解的真正的参数。在我看来,您似乎想为函数/脚本提供参数,如果这样做,您可以在$1-9中找到参数(我认为bash支持更多,不确定),参数的数量存储在$#。@Jite-对。听起来你可以把它充实成另一个答案。一种使用参数而不是环境变量的方法。@ArjunShankar-刚刚使用了,举个简单的例子,谢谢。@Alan Curry在哪里以及为什么需要它?
导出SIM_DIR=/home/someon/simulations
-如果不导出它,它只是当前shell中的shell变量,而不是环境variable@Deve-除非出口,变量在子流程中不可用。这意味着,除非导出它,否则即使bash看到SIM_DIR,脚本也不会。请参阅@Alan Curry在何处以及为什么需要它?
导出SIM_DIR=/home/someon/simulations
-如果不导出它,它只是当前shell中的shell变量,而不是环境variable@Deve-除非导出,否则子流程中不提供变量。这意味着,除非导出它,否则即使bash看到SIM_DIR,脚本也不会。看见