2014-06-16 50 views
2

我真的很困惑。我從兩個單獨的文件中讀取了主機名和命令中的嵌套循環。在文件中我想放置「#」註釋行,這些行需要被主腳本忽略。在下面的腳本中,命令讀取正常,「#」註釋行被很好地忽略,但讀取Hostnames文件獲得第一個主機名,然後終止while/do循環!
如果我真的把「#」註釋行放在主機名中,那麼它會一直讀取它們,直到到達geniune主機名,然後終止循環。評論未被可靠忽略

# Read the Hostname from Hostnames.txt 
while read HOST 
[[ "$HOST" =~ ^#.*$ ]] && continue 
do 
. 
    while read Cmd1 Cmd2 Cmd3 Prompt 
    # Read Commands from Commands1.txt file but ignore comment lines 
    [[ "$Cmd1" =~ ^#.*$ ]] && continue 
    do 
    . 
    . 
    done < Commands1.txt 
done < Hostnames.txt 

另外的怪事:如果我把一個行echo $HOST[[ "$HOST" =~ ^#.*$ ]] && continue行要求,但當然它呼應不必要的屏幕輸出它的工作原理。

命令文件內容:

#Juniper commands 
set cli screen-length 0,show version,exit,> 

主機名的文件內容

ABCD1234

+0

我很驚訝它的工作;你不需要'while'循環嗎?他們是否做出這一選擇? –

+2

輸入文件中的'#'字符是否總是*像圖案需要的線上的第一個字符?你有DOS風格的行結局(還是更糟,混合行結束)?也許嘗試更多的東西,比如'while read ... done < twalberg

+0

對不起@Tom Zych'do'語句剛纔顯示出來。 –

回答

0

總結意見,do聲明是在錯誤的地方;他們應該在while報表後立即出現。

+0

謝謝湯姆,感謝。 –