我正在尝试使用另一个脚本修改一个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
答案 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。