丫灼
Lv 4
丫灼 asked in 電腦與網際網路程式設計 · 1 decade ago

shell script變數問題

我有兩個 shell script 檔案,分別為 test1 及 test2

test1 內有個變數叫 var

這個變數我想要在 test2 內使用

請問我該如何用?

test1 這個 script 先執行,執行完後,test2 才執行

我在 test1 內用 export var , 可是在 test2 卻無法讀取 var 這個變數

是我用錯了嗎?

Update:

大師你好 :

我是用你說的第二種方法,因為我的 test1 及 test 2 必須分開執行

我再問你一個問題 ^^

那如果 test1 裡有兩個變數 (var , var1) 要給 test2 用

我想到的只有把這兩個變數分別寫到兩個檔案 (tmp , tmp1) 中

例如 :

在 test1 裡寫

echo $var > tmp

echo $var1 > tmp1

在 test2 裡寫

read var < tmp

read var1 < tmp1

請問如何把兩個變數寫到一個檔案中

例如只寫到 tmp 裡

就是不要分別寫到兩個檔案裡

謝謝

Update 2:

你好 ^^

兩個變數的內容已經寫到同一個檔案裡

可是如何讀出兩個變數?

我用 read var < file

這樣只能讀取第一個變數

那我該如何讀到第二個變數?

Update 3:

大師你好

我又有個問題想請教你^^,感謝

http://tw.knowledge.yahoo.com/question/question?qi...

1 Answer

Rating
  • Lv 7
    1 decade ago
    Favorite Answer

    因你是要先執行test1之後在執行test2.所以都是屬於你現在的shell裡的子弟.因此你在test1裡export的變數在test2裡看不到.你若在test1裡執行test2的話那你在test1裡export的變數在test2裡就可以看到了.因test1是test2的爸爸.但要記得.在test1裡的變數並不是test2裡的變數喔.變數的名稱一樣,其值也一樣.但是其實是兩個不同的變數.因在不同的script裡.也就是說若在執行test2時有更改到那變數的值.其改變的是在test2裡的變數.在test1裡的變數並不會改變.例:

    #cat test1

    export TEST=hello

    echo test11 $TEST

    ./test2

    echo test12 $TEST

    #cat test2

    echo test21 $TEST

    TEST=hey

    echo test22 $TEST

    #./test1

    test11 hello <--- 在test1裡TEST是hello

    test21 hello <--- 在test2裡一開始TEST是hello

    test22 hey <--- test2把TEST改成hey

    test12 hello <--- 在test1裡TEST還是hello

    你若要在不同的script裡傳值的話有好幾種做法.

    1. 用redirect方式.例:

    #cat test1

    echo hello

    #cat test2

    read input

    echo test2 $input

    #./test1 | test2

    test2 hello

    2. 用檔案.例:

    #cat test1

    echo hello > temp

    #cat test2

    read input < temp

    echo test2 $input

    #./test1

    #./test2

    test2 hello

    3. 把test1和test2從script改成function.之後擺在一個script裡用.這樣她們就可以共用同一個變數了.

    P.S.以上是用ksh寫成

    懂不懂?不懂請再問

    2009-02-10 10:29:46 補充:

    要用>>的方式

    第一個echo用>表示要從新開檔.(把原先的檔案刪除掉之後從新開檔).

    第二個echo用>>表示要普通開檔.就是把你要的東西寫在檔案的尾端.

    之後用read var < file就行了

    2009-02-14 08:06:03 補充:

    {

    read a

    read b

    } < file

    Source(s): Myself, Myself, Myself
Still have questions? Get your answers by asking now.