expect script foreach loop












-1














i´m not that familiar with expect and scripting. I try to read a hosts.txt with mutliple switchtes and interfaces inside. Then do ssh and send a few commands. I´m able to split the file in two variables: switch and interface. But how can i do a loop so that all lines were proceed? And is it possible to do the two splits in one?



#!/usr/bin/expect -f



set fp [open "hosts2.txt" r]
set content [read $fp]
close $fp



set records [split $content "n"]
lassign $records line

set oneline [split $line ","]
lassign $oneline switch interface

set password "mypassword"

spawn ssh -o StrictHostKeyChecking=no $switch

expect "Password:"
send "$passwordr"

expect {
"*#" {
send_user "nnIN PRIV MODE nn"
}
"*>" {
send_user "nnIN USER MODE nn"
send "enabler"
expect "assword:"
send "$passwordr"
expect "*#"
}
}

send "conf tn"
expect "*(config)"
send "interface $interfacen"
expect "*(config-if)"
send "shutn"
expect "*(config-if)"




send "exitr"


Here is an example of my hosts file:



switch1,GigabitEthernet1/0/1
switch2,GigabitEthernet1/0/2
switch3,GigabitEthernet1/0/3









share|improve this question


















  • 1




    Tcl has a builtin foreach command.
    – pynexj
    Dec 28 '18 at 9:44










  • Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
    – Philipp_GER
    Dec 28 '18 at 9:48


















-1














i´m not that familiar with expect and scripting. I try to read a hosts.txt with mutliple switchtes and interfaces inside. Then do ssh and send a few commands. I´m able to split the file in two variables: switch and interface. But how can i do a loop so that all lines were proceed? And is it possible to do the two splits in one?



#!/usr/bin/expect -f



set fp [open "hosts2.txt" r]
set content [read $fp]
close $fp



set records [split $content "n"]
lassign $records line

set oneline [split $line ","]
lassign $oneline switch interface

set password "mypassword"

spawn ssh -o StrictHostKeyChecking=no $switch

expect "Password:"
send "$passwordr"

expect {
"*#" {
send_user "nnIN PRIV MODE nn"
}
"*>" {
send_user "nnIN USER MODE nn"
send "enabler"
expect "assword:"
send "$passwordr"
expect "*#"
}
}

send "conf tn"
expect "*(config)"
send "interface $interfacen"
expect "*(config-if)"
send "shutn"
expect "*(config-if)"




send "exitr"


Here is an example of my hosts file:



switch1,GigabitEthernet1/0/1
switch2,GigabitEthernet1/0/2
switch3,GigabitEthernet1/0/3









share|improve this question


















  • 1




    Tcl has a builtin foreach command.
    – pynexj
    Dec 28 '18 at 9:44










  • Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
    – Philipp_GER
    Dec 28 '18 at 9:48
















-1












-1








-1







i´m not that familiar with expect and scripting. I try to read a hosts.txt with mutliple switchtes and interfaces inside. Then do ssh and send a few commands. I´m able to split the file in two variables: switch and interface. But how can i do a loop so that all lines were proceed? And is it possible to do the two splits in one?



#!/usr/bin/expect -f



set fp [open "hosts2.txt" r]
set content [read $fp]
close $fp



set records [split $content "n"]
lassign $records line

set oneline [split $line ","]
lassign $oneline switch interface

set password "mypassword"

spawn ssh -o StrictHostKeyChecking=no $switch

expect "Password:"
send "$passwordr"

expect {
"*#" {
send_user "nnIN PRIV MODE nn"
}
"*>" {
send_user "nnIN USER MODE nn"
send "enabler"
expect "assword:"
send "$passwordr"
expect "*#"
}
}

send "conf tn"
expect "*(config)"
send "interface $interfacen"
expect "*(config-if)"
send "shutn"
expect "*(config-if)"




send "exitr"


Here is an example of my hosts file:



switch1,GigabitEthernet1/0/1
switch2,GigabitEthernet1/0/2
switch3,GigabitEthernet1/0/3









share|improve this question













i´m not that familiar with expect and scripting. I try to read a hosts.txt with mutliple switchtes and interfaces inside. Then do ssh and send a few commands. I´m able to split the file in two variables: switch and interface. But how can i do a loop so that all lines were proceed? And is it possible to do the two splits in one?



#!/usr/bin/expect -f



set fp [open "hosts2.txt" r]
set content [read $fp]
close $fp



set records [split $content "n"]
lassign $records line

set oneline [split $line ","]
lassign $oneline switch interface

set password "mypassword"

spawn ssh -o StrictHostKeyChecking=no $switch

expect "Password:"
send "$passwordr"

expect {
"*#" {
send_user "nnIN PRIV MODE nn"
}
"*>" {
send_user "nnIN USER MODE nn"
send "enabler"
expect "assword:"
send "$passwordr"
expect "*#"
}
}

send "conf tn"
expect "*(config)"
send "interface $interfacen"
expect "*(config-if)"
send "shutn"
expect "*(config-if)"




send "exitr"


Here is an example of my hosts file:



switch1,GigabitEthernet1/0/1
switch2,GigabitEthernet1/0/2
switch3,GigabitEthernet1/0/3






loops expect






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Dec 28 '18 at 9:22









Philipp_GERPhilipp_GER

1




1








  • 1




    Tcl has a builtin foreach command.
    – pynexj
    Dec 28 '18 at 9:44










  • Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
    – Philipp_GER
    Dec 28 '18 at 9:48
















  • 1




    Tcl has a builtin foreach command.
    – pynexj
    Dec 28 '18 at 9:44










  • Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
    – Philipp_GER
    Dec 28 '18 at 9:48










1




1




Tcl has a builtin foreach command.
– pynexj
Dec 28 '18 at 9:44




Tcl has a builtin foreach command.
– pynexj
Dec 28 '18 at 9:44












Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
– Philipp_GER
Dec 28 '18 at 9:48






Okay but where do i have to put the foreach in my case? Just like: foreach line in my hosts.txt separate by , do some commands?
– Philipp_GER
Dec 28 '18 at 9:48














0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53956210%2fexpect-script-foreach-loop%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53956210%2fexpect-script-foreach-loop%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Monofisismo

Angular Downloading a file using contenturl with Basic Authentication

Olmecas