如何编写 shell 脚本来启动另一个脚本并使用相同的变量值

如何编写 shell 脚本来启动另一个脚本并使用相同的变量值

我没有给出真实的例子,因为这篇文章太长了,没人会读。所以我会给出其他例子,我有一个 bash 脚本 name.sh,它的编程如下-

#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh

另一个脚本(例如age.sh)如下-

#!/bin/bash
*echo "Hello $name"
echo "Please enter your age"
read age
echo "Thank you"

*在第二个脚本中,我希望第一个脚本中的变量 $name 在第二个脚本中具有相同的值,这样用户就不必再次输入他的名字。当然,如果我声明了一个变量,那么我也可以在另一个脚本中这样做,但如果用户声明了它,那么我无法预测用户会回答什么。那么我如何将相同的值转移到另一个脚本?
我有另一个想法,它
是这样的-

#!/bin/bash
echo "Please Enter your name"
read name
echo "Hello $name"
sudo bash age.sh --variable_value

我怎样才能让第二个脚本使用--之后给出的值并将相同的变量分配给它们?

答案1

在调用脚本中导出变量:

read name
export name="$name"

这样,变量就会传播到任何被调用的脚本和子 shell。

要检索脚本中的命令行参数,请使用变量“$1”、“$2”...这些变量填充了您传递给命令的不同参数。“$0”将检索命令本身的名称,“$@”将一次检索整个参数字符串。

答案2

至少有两种方法可供您使用:

  1. 将变量作为位置参数传递给脚本:

    ./script.sh $VARIABLE
    
  2. 导出变量,以便子 shell 可以使用它:

    export VARIABLE
    ./script.sh
    

假设在正常情况下,当您从另一个脚本运行一个脚本时,或者更正确地说,从 shell 运行一个脚本时,主题脚本会分叉一个子 shell。

下面是一个包含两个脚本的示例,分别称为master.shslave.sh

$ cat master.sh
#!/bin/bash
echo "Please Enter your name"
read THE_NAME
./slave.sh "$THE_NAME"
$ cat slave.sh
#!/bin/bash

# Test whether the $NAME is provided in some way. If not ask the user for the value.
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then THE_NAME="$1"; fi
if [[ -z $THE_NAME || $THE_NAME = '' ]]; then echo "Please provide your name"; read THE_NAME; fi

echo "Your name is: ${THE_NAME}"
$ ./slave.sh
Please provide your name
SPAS Z. SPASOV
Your name is: SPAS Z. SPASOV
$ THE_NAME=Spas
$ export THE_NAME
$ ./slave.sh
Your name is: Spas
$ ./master.sh
Please Enter your name
Spas Spasov
Your name is: Spas Spasov

相关内容