2013-04-04 52 views
1

到目前爲止,我已經能夠使用ssh創建一個小腳本,期望將一個命令傳遞給我正在使用的dd-wrt路由器。現在已經完成了,如果可能的話,我希望通過ssh登錄多次傳遞相同的命令,而不是僅從文本文件中傳遞一次。如何通過ssh將命令傳遞給dd-wrt使用文本文件中的變量進行循環?

完成此操作的另一種方法是創建一個循環並將命令通過並​​重新傳遞。我將不得不使用一個變量,因爲文本文件中命令的數據發生了變化。

這裏是我迄今爲止

#!/bin/expect -f 

設置的密碼密碼

spawn ssh -l root x.x.x.x -p "command" 
    expect "*password:*" 
    send -- "$password\r" 
    send -- "\r" 

從我可以看到創建一個循環將是最簡單的方法,但我可能是錯的。 注意我想要通過的「命令&變量」在單獨的文本文件中,並且它需要讀/取每一行並將每一行插入到循環中。除非有辦法一次性發送它們。

#!/bin/expect -f 

設置的密碼密碼

spawn ssh -l root x.x.x.x -p "command Variable" <-- Command to be passed through 
    expect "*password:*" 
    send -- "$password\r" 
    send -- "\r" 

它在文本文件中的每個時刻,只有變量的變化相同的命令。

的test.txt

command xxxxxxx 
command xxxxxxx 
command xxxxxxx 
command xxxxxxx 

感謝信

回答

2

我認爲你應該做這樣的事情。

start.sh

#!/bin/bash 
password="your_password" 
cat test.txt|while read line 
do 
    for i in $line 
    do 
     ssh.exp $i $password 
    done 
done 

ssh.exp

#!/usr/bin/expect 
set command [lrange $argv 0 0] 
set password [lrange $argv 1 1] 
spawn ssh -l root x.x.x.x -p "$command" 
expect "*password:*" 
send -- "$password\r" 
send -- "\r" 

而且隨着你的命令列表的test.txt。每個在不同的線上。

+0

該循環的工作非常好,謝謝你,但我已經從文本文件中刪除命令,並將其放在「$命令」前,因爲它只是將該變量攜帶到ssh.exp文件。 – 2013-04-05 12:41:03

相關問題