2013-06-27 97 views
0

我很新bash。我試圖達到一個很容易的事情,但它看起來像非常複雜...問題與我的bash腳本

我想從文件(IP地址,用戶名,密碼)讀取變量,並連接到防火牆來改變它們。

該文件大約100行,我試圖逐一閱讀,從第二列,第一個用戶名選擇防火牆的IP地址,並從第​​三和第四列傳遞,第二個用戶名並從第五和第六列。 文件看起來像:

Office1 IP uname1 pass1  uname2 pass2 
Office2 IP uname1 pass1  uname2 pass2 

所有原糖由製表符分隔 的腳本看起來像這樣的:

#!/bin/bash 
    office=`awk '{print $1}' TEST.txt` 
    user1=`awk '{print $3}' TEST.txt` 
    user2=`awk '{print $5}' TEST.txt` 
    password1=`awk '{print $4}' TEST.txt` 
    password2=`awk '{print $6}' TEST.txt` 
    /usr/bin/expect <<EOF 
    for p in `cat TEST.txt | awk '{print $2}'` 
    do 
    # echo $user1 ", " $password1", " $user2", "$password2" 
    set timeout 20 
    spawn telnet $p 
    expect "login:" 
    send "cipollone" 
    send \r 
    expect "password:" 
    send "mypass" 
    send \r 
    expect ">" 
    send "set admin user $user1 password $password1 privilege all" 
    send \r 
    expect ">" 
    send "set admin user $user2 password $password2 privilege all" 
    send \r 
    expect ">" 
    send "save" 
    send \r 
    expect ">" 
    send "exit" 
    send \r 
    send \r 
    send \r 
    # echo $office $p "DONE" 
    # echo \r 
    # echo $office $p "DONE" >> results.txt 
    # echo \r >> results.txt 
    exit 
    EOF 
    done < TEST.txt 
+0

腳本化telnet會話可能導致精神錯亂。什麼是防火牆平臺,它有任何配置API? – MattH

+0

請勿使用貓的TEST.txt | awk'{print $ 2}''''!改用''awk'{print $ 2}'TEST.txt'''。 'EOF'應該在'完成'之後,而不是之前。 – TrueY

+0

似乎你在'TEST.txt'中只有一行。如果有多行,這個腳本肯定沒有做它應該做的。 – TrueY

回答

4

腳本的一般結構應爲:

while read office ip user1 password1 user2 password2 
do 
    /usr/bin/expect <<EOF 
    ... 
EOF 
done < TEST.txt 
0

按照@ Barmar的建議。另外:

  • for p in `cat TEST.txt | awk '{print $2}'`使用這裏,文檔,EOF必須出現沒有任何前導空格終止字的時候是沒有想到
  • 有效。
+0

它看起來並不像'EOF'行上有任何前導空白,它與腳本中的其他所有內容一致。 – Barmar