将参数传递给 Linux 中的重定向脚本

将参数传递给 Linux 中的重定向脚本

我有两个脚本,假设它们是 s1.sh 和 s2.sh。

在s1中,代码是

step = 0
.
.(omitted)
.
if [ $step -eq 19 ]; then

    ./s2.sh 

在s2中,代码是

step=0
.
. (many codes here, but omitted)
.
if [ $step -eq 18 ]; then
  print "hello"

我想从第19步开始运行s1,然后由于s1会调用s2,所以我希望s2也可以直接进入第19步。

以前听人讲过这个,但具体方法我实在记不清了。我认为执行此操作的命令代码如下:

./s1.sh --step 19 [some code?]--step 18

知道如何编写可以将参数传递给上面的两个脚本的命令行吗?

答案1

如果您希望step两者相同,请export step在 s1 中运行。一旦你这样做了,step变量就会出现在 s2 中,而不必在调用它时显式传递。

如果您想step在 s2 中设置与 s1 不同的值,请添加step=whatever到对 s2 的调用之前。例如,要使其在 s2 中为 8,您可以这样做:step=8 ./s2.sh

答案2

实现此结果的一种方法是使用位置参数:

这是 test1.sh 脚本:

#!/bin/bash

step=$1
step2=$2

if [[ step -eq 19 ]]; then
    ./test2.sh $step2
fi

和 test2.sh 脚本:

#!/bin/bash

step=$1

if [[ step -eq 18 ]]; then
    echo "success - step 18 executed"
fi

然后你可以像这样调用 test1.sh (在你的例子中是 s1.sh ):

./test1.sh 19 18

之后您应该会收到成功消息。尽管这确实需要对原始脚本进行一些编辑,但它确实提供了很大的灵活性,并使扩展两个脚本变得更加简单。如果您决定使用此方法,我强烈建议为步骤和步骤 2 变量建立默认值。

相关内容