shell 語法問題求助

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

shell 語法問題求助

文章med » 週六 9月 23, 2006 3:37 pm

小弟在編寫 bash script 時,
想要對三個相似的變數做相同的處理,
於是使用以下 Code。

代碼: 選擇全部
#!/bin/sh
FOO1=aaa
FOO2=bbb
FOO3=ccc

for i in 1 2 3
do
eval "echo \$FOO$i"
BAR=`eval "echo \$FOO$i"`
echo $BAR
done


小弟的目的是希望將 $FOO1, $FOO2, $FOO3 的值複製到 $BAR中,
以方便之後的 script 撰寫。
但是以上 Code的執行結果,
$BAR的內容卻是 1, 2, 3,
請問小弟該如何改正上面這段 code,
達到我要的結果呢? ( $BAR= aaa, bbb, ccc )
med
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週四 2月 24, 2005 2:00 pm

文章kahn » 週六 9月 23, 2006 5:18 pm

參考這個

grep ida /var/log/apache/access.log |
awk '{print $1}' |
sort -u|
while read host;
do
/sbin/shorewall drop $host
done
頭像
kahn
活潑的高中生
活潑的高中生
 
文章: 350
註冊時間: 週三 9月 04, 2002 10:52 pm
來自: 彰化

文章wesley.tw » 週六 9月 23, 2006 5:36 pm

如果改成array寫法呢??
這樣可以達到你的需求嗎?

#!/bin/bash
FOO1=aaa
FOO2=bbb
FOO3=ccc

for i in 1 2 3
do
eval "echo \$FOO$i"
BAR=`eval "echo \$FOO$i"`
echo $BAR
done
wesley.tw
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週五 9月 22, 2006 10:56 am
來自: 中壢

文章med » 週六 9月 23, 2006 8:54 pm

謝謝兩位大哥的指導,
小弟將 script 改成這樣,的確達到我要的結果了。

代碼: 選擇全部
#!/bin/sh
FOO1=aaa
FOO2=bbb
FOO3=ccc

for i in 1 2 3
do
    eval "echo \$FOO$i" |
    while read BAR;
    do
        echo $BAR
    done
done


但小弟又有新的疑問,
我試著以這樣的寫法讀值卻什麼都讀不到,
代碼: 選擇全部
    eval "echo \$FOO$i" |  read BAR 


必須將 read放在 while 中才能成功,
為什麼會這樣呢?
med
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週四 2月 24, 2005 2:00 pm

文章med » 週六 9月 23, 2006 9:08 pm

將 FOO改成陣列,的確也可以達到我的目的,
而且這樣的寫法也比較直覺,
只是小弟現在目的是為了讀取別人寫的設定檔,
設定檔中已經將變數寫成 FOO1, FOO2, FOO3的形式了。

所以只好嘗試用重組變數的名稱來達到目的了。
med
可愛的小學生
可愛的小學生
 
文章: 13
註冊時間: 週四 2月 24, 2005 2:00 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron