2013-06-19 70 views
0

我正在創建一些shell腳本。 script1是具有爲前要從shellscript獲取變量的值

script1 
method1() 
{ 
if [[somecondition]] 
then 
    var=y 
else 
    var=n 
fi 
} 
method2 
.... 

.... 

內部方法1 的條件,如果我想在SCRIPT2

script2 
methodx() 
{ 
foo=$var 
if [[ $foo = [Yy] ]] 
then 
    ..... 
    ..... 
elif [[ $foo = [Nn] ]] 
then 
    ..... 
    ..... 
else 
    ..... 
fi 
} 

無論這個腳本var值在另一個腳本正在執行

script3 

methodA() 
{ 
./script1 
.... 
.... 
.... 
} 

methodB() 
{ 
./script2 
.... 
.... 
.... 
} 

我怎樣才能得到的VaR從script1價值script2

回答

0

您總是需要[[]]以內的空間。另外,要測試一個模式,您可以使用[[ $foo =~ [Nn] ]]

一般來說,如果要存儲一個腳本到標準輸出使用varname=$(command arguments)打印的文本。

+0

謝謝你,我會考慮的, 但你會是什麼我已編輯上面的代碼爲我的查詢 –

0

看起來像你需要從SCRIPT1 method1methodx從SCRIPT2在script3的外殼來定義。爲此,在script3中,您需要source script1source script2,而不是執行它們。要完成,您可能需要稍微重構您的代碼,因爲我在script1和script3中都看到了method1。

+0

解決知道它是SCRIPT1了methodA爲script3方法1。 你可以舉一個例子如何獲取腳本1和腳本2 –

+0

正如我在答案中所寫:將'。/ script1'改爲'source script1'。 –

+0

但是我怎樣才能從var'script1'到'script2' –

0

由於l0b0說,在了methodA,而不是僅僅./script1,你這樣做:

foo=$(./script1) 

,你可能想要把它周圍的報價,如果SCRIPT1的輸出中有空格:

foo="$(./script1)" 

而且,爲了安全起見,在method1之外聲明foo,所以它是全局的(這是默認的,但它總是很高興看到事情宣佈。所以,在script3的頂部做:

typeset foo 

如果您可以將腳本1和腳本2合併到腳本3中,這會更快,可能更容易維護,但仍需要多次使用$(...)構造。在過去,這種使用是回抽動:

foo=` ./script1 ` 

這仍然是支持的語法。