2017-01-13 4 views
-1

別のスクリプトを使用して、あるシェルスクリプトの変数を変更しようとしています。これは私がこれまで持っているものです:私はここにスクリプトの1を修正することはなく、単に一時的ではないのですということを理解別のシェルスクリプトで変数を変更する

script1.sh

#!/bin/bash 

var=123.45.67.890 

script2.sh

#!/bin/bash 

currVar=000.00.00.000 

. /./script1.sh 
var=$currVar 

varを変更する。スクリプト1で、スクリプト2でこのvarを変更するにはどうすればよいですか?

ソリューション

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

質問は非常に曖昧です、私はあなたがこれをやっている理由を知っているかもしれませんか? –

+0

私は、スクリプト作成を使ってオンデマンドでIPアドレスを変更できることによって、プロセスを自動化しようとしています。 – xylo12

+0

問題の説明全体を書くことができますか?回答または代替案を提案できますか? –

答えて

2

だけ[[:graph:]][[:alnum:]] & [[:punct:]]の文字クラスは、印刷可能な文字でvarの値を一致させることです

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

として2ndスクリプト(script2.sh)でsedを使用/メタキャラクター。

もし

(\b[0-9]{1,3}\.){3}[0-9]{1,3}により先行し、各グループは1-3桁からそれぞれ有することができる0-9から数字から成る一致3基を意味

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

として適切 regExを使用し、それが適切なIPアドレスで述べたのでドット .と4番目のグループも最後と同じです。私が言及している各グループは、IPオクテットを表すことを覚えておいてください。

+0

多分var = '$ currVar'でvar = 000を変更することができます。 –

+0

これは変数 – xylo12

+0

@sartarでは機能しません。そうです。あなたはただInianのスクリプトを変更する必要があります.... var = '$ currVar' ... –

0

通常、スクリプト内の変数にはローカルスコープがあります。変数exportの場合、このスコープを拡張して、子プロセスを含めることができます。しかし、script1.shが実行されているときに、変更された値を使用するように思われます。その場合、新しいvar値をscript1.shの入力として使用して実行することができます。

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

あなたがscript1.shを実行したときに任意のパラメータを与え、そしてあなたがした場合、それはこの値の代わりに、デフォルトのIPへのごvar等しいを設定しなければならない場合、これはチェックします。

+0

ですそれを理解しました、問題の解決策、あなたはどう思いますか? – xylo12

+0

@artar:仕事をしていても、あまりにも綺麗な仕事をしていても、私の解決策を参照してください。 – Inian

+2

エクスポートによってグローバル変数が誤っていると言っています。変数はグローバルではなく、すべての子プロセスにコピーされます。グローバルは共有データを意味します。つまり、子が独自の環境変数を変更した場合、親には影響しません。 – cdarke

関連する問題