added ask(prompt|default) in scripts to interactivly ask questions,
[perl-cwmp.git] / scripts / tcli.pl
1 #!/usr/bin/perl -w
2
3 use strict;
4 use Expect;
5 use Net::Telnet;
6 use Data::Dump qw/dump/;
7
8 my $modem = '10.0.0.138';
9 $modem = shift @ARGV if $#ARGV > 1;
10
11 my @commands = (
12 ':system config led=flash',
13 );
14
15 warn "ARGV = ",dump( $ARGV );
16
17 sub ask {
18         my ( $prompt, $default ) = @_;
19         warn "## ask $prompt [default]";
20         print "$prompt [$default] ";
21         my $in = <STDIN>;
22         chomp($in);
23         $in = $default unless length($in) > 1;
24         return $in;
25 }
26
27 while(<>) {
28         chomp;
29         next if (/^#/ || /^\s*$/);
30         my $l = $_;
31         warn "--$_--";
32         $l =~ s/ask\(([^|\)]+)(?:\|([^\)]+))?\)/ask($1,$2)/eg;
33         warn "++ $l\n";
34         push @commands, $l;
35 }
36
37 push @commands, ':system config led=off';
38
39 my $debug = 0;
40
41 my $telnet = new Net::Telnet( $modem ) or die "Cannot telnet to $modem: $!\n";
42 my $exp = Expect->exp_init($telnet);
43 $exp->debug( $debug );
44
45 $exp->log_stdout( 1 );
46
47 my ( $username, $password ) = ('Administrator','');
48 my $timeout = 3;
49
50 $exp->expect($timeout, 'Username : ');
51 $exp->send("$username\r\n");
52 $exp->expect($timeout, 'Password :');
53 $exp->send("$password\r\n");
54 $exp->expect($timeout, '=>');
55
56 foreach my $cmd ( @commands ) {
57         $exp->send( "$cmd\r\n" );
58         $exp->expect($timeout, '=>');
59 }
60
61 $exp->send( "exit\r\n" );
62 $exp->soft_close();
63