修改另一个shell脚本中的变量

时间:2017-01-13 17:48:47

标签: bash shell variables

我正在尝试使用另一个脚本修改一个shell脚本的变量。这就是我到目前为止所做的:

script1.sh

#!/bin/bash

var=123.45.67.890

script2.sh

#!/bin/bash

currVar=000.00.00.000

. /./script1.sh
var=$currVar

我知道我不是在这里修改脚本1,而只是暂时修改var。如何通过脚本2在脚本1中修改此var?

解决方案

. /./script1.sh
echo $var | sed "s/$var/$currVar/g" /./script1.sh > "temp.txt" && mv temp.txt /./script1.sh

2 个答案:

答案 0 :(得分:2)

只需在sed脚本(2nd)中使用script2.sh作为

currVar="000.00.00.000"
sed -r -i.bak "s/var=([[:graph:]]+)/var=$currVar/" script1.sh
var=000.00.00.000

其中[[:graph:]][[:alnum:]]&的字符类。 [[:punct:]]var的值与可打印字符/元字符匹配。

由于您提到它是一个合适的IP地址,请使用正确的regEx作为

sed -r "s/(\b[0-9]{1,3}\.){3}[0-9]{1,3}\b/$currVar/" script1.sh
var=000.00.00.000

(\b[0-9]{1,3}\.){3}[0-9]{1,3}表示由3的数字组成的匹配0-9组,每个组可以有1-3个数字,前面有一个点.,第四组也与上一组相同。请记住,我提到的每个组代表一个IP八位字节

答案 1 :(得分:0)

通常,脚本中的变量具有局部范围。如果您export变量,则可以扩展此范围以包括任何子进程。但是,看起来您可能希望在script1.sh运行时使用修改后的值。如果是这种情况,您可以在运行时使用新的var值作为script1.sh的输入。

if [[ -z "$1" ]];
then
  var=$1
else
  var=123.45.67.890

这将检查您在运行script1.sh时是否提供了任何参数,如果您这样做,则应将var设置为等于此值而不是默认IP。