title: EXPECT Script for Cisco / Juniper Config Backup
body: <p>Firstly I am asking this as a beginner in scripting, currently I have an expect script which automatically logs in to predefined Cisco devices and runs certain commands, I would like to update my script so that this same script can also backup Juniper devices.</p>
  
  <p>Ideally what I would like the script to do is (in pseudo code)</p>
  
  <pre><code>      login / send credentials
        expect prompt
        send command "show version"
        if output contains "JUNOS" then
                  send command 1
                  send command 2
                  send command 3
        otherwise if output contains "Cisco" then
                  send command 1
                  send command 2
                  send command 3
  </code></pre>
  
  <p>Im sorry if this has been asked before, but I have tried searching and searching and couldn't find an answer if anyone can assist with this I would really appreciate it. I have also included my current expect script for your reference (this script gets called by a BASH Script)</p>
  
  <pre><code>set timeout 5
  set hostname [lindex $argv 0]
  set username "user"
  set password "pass"
  
  spawn ssh $username@$hostname
  
  expect "Password:"
  send "$password\n"
  expect "#" {
  send "terminal length 0\n"
  send "show running-config\n"
  expect "end\r"
  send "\n"
  send "exit\n"
  }
  </code></pre>
  
  <p>---- UPDATE ---</p>
  
  <p>Thanks for your input Dinesh - I have updated my script to include what you provided (as below)</p>
  
  <pre><code>set timeout 5
  set hostname [lindex $argv 0]
  set username "user"
  set password "pass"
  set prompt "(&gt;|#|\\\$) $"
  
  spawn ssh $username@$hostname
  
  
  expect "*assword:"
  send $password\r
  send \r
  expect -re $prompt {
  
      send "show version\r"
      expect -re $prompt
      expect *;
  
      set output $expect_out(buffer);
  
      #Basic string check logic with Tcl
      if { [string first "JUNOS" $output ]!=-1 } {
          send "show configuration | display set | no-more"
      expect -re $prompt
      send "exit\r"
      } else {
      send "terminal length 0\r"
      expect -re $prompt
      send "show run\r"
      expect "end"
      send \r
      expect -re $prompt
      send "exit\r"
      }
  }
  </code></pre>
  
  <p>However when i run this script the issue I have is that the output of the "show version" doesn't seem to be matching my "string check" and the script therefore ignores the "if" statement and proceeds with the "else" statement.</p>
  
  <p>The output of the "show version" command is below - what will I need to modify so that the "JUNOS" string gets matched?</p>
  
  <pre><code>user@host&gt; show version
  Hostname: host
  Model: srx240h
  JUNOS Software Release [11.4R7.5]
  </code></pre>
  
  <p>--- EDIT 2: Output from the script</p>
  
  <pre><code>05c4rw@testpc:~/script$ ./ssh.sh
  spawn ssh user@juniperhost
  ## LOGIN BANNER - Removed for brevity
  
  user@juniperhost's password:
  --- JUNOS 11.4R7.5 built 2013-03-01 11:40:03 UTC
  user@juniperhost&gt; show version
  Hostname: juniperhost
  Model: srx240h
  JUNOS Software Release [11.4R7.5]
  
  user@juniperhost&gt; show configuration | display set | no-more
  set version 11.4R7.5
  
  ## *** OUTPUT REMOVED FOR BREVITY / PRIVACY ***
  
  ## *** END OF OUTPUT from previous command
  
   user@juniper&gt; spawn ssh user@ciscohost
   password:
   ## LOGIN BANNER - removed for brevitiy
  
   ciscohost#05c4rw@testpc:~/script$
  </code></pre>