求高人指点:shell编程_spawn传参数的问题
本帖最后由 imvega 于 2013-04-02 08:49 编辑写了一个脚本,读取file.txt上服务器的IP和用户名密码,实现远程备份,但执行时会报错,报错信息如下:
==========================================
syntax error in expression "read"
while executing
"while read LINE"
==========================================
bash -x调试时,显示如下:
==========================================
+ bash -x remote_backup_dns.sh
+ cd /home/tools/conf_backup/
+ set date ''
+ read LINE
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $1}'
+ set SERVER 192.168.0.1
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $2}'
+ set USER root
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $3}'
+ set PASSWORD 123456
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $4}'
+ set DIRECT test_01
+ spawn scp 'root@:/abc/abc**' /abc/
test.sh: line **: spawn: command not found
+ set timeout 300
+ expect 'root@'\''s password:'
couldn't read file "root@'s password:": no such file or directory
+ set timeout 300
+ send '\r'
test.sh: line **: send: command not found
+ send 'exit\r'
test.sh: line **: send: command not found
+ read LINE
+ expect eof
couldn't read file "eof": no such file or directory
==========================================
bash -x结果表明,SERVER、USER、PASSWORD、DIRECT的参数的值已经是正确的,
但是,spawd语句显示,没有将相应的参数的值传入。
不知是什么原因?在线等高人指点。
原脚本如下:
===========================================
#!/usr/bin/expect -f
cd /home/tools/conf_backup/
set DATE
while read LINE;
do
set SERVER `echo $LINE | awk '{print $1}'`
set USER `echo $LINE | awk '{print $2}'`
set PASSWORD `echo $LINE | awk '{print $3}'`
set DIRECT `echo $LINE | awk '{print $4}'`
spawn scp $USER@$SERVER:/abc/abc*$date* /abc/$DIRECT
set timeout 300
expect "$USER@$SERVER's password:"
set timeout 300
send "$PASSWORD\r"
send "exit\r"
done < file.txt
expect eof
============================================ 自己顶顶,盼回复 imvega 发表于 2013-04-01 15:14 static/image/common/back.gif
写了一个脚本,读取file.txt上服务器的IP和用户名密码,实现远程备份,但执行时会报错,报错信息如下:
== ...
expect can't use
"while read LINE " , to read file
it should
open file
gets $fd file
you can use shell call expect
while read LINE
do
SERVER=`echo $LINE | awk '{print $1}'`
USER=`echo $LINE | awk '{print $2}'`
PASSWORD=`echo $LINE | awk '{print $3}'`
DIRECT=`echo $LINE | awk '{print $4}'`
print "$SERVER;$USER;$PASSWORD;$DIRECT \n"
a.tcl $SERVER $USER $PASSWORD $DIRECT
done < 3.txt
cat a.tcl
set SERVER
set USER
set PASSWORD
set DIRECT
puts "line6:$SERVER;$USER;$PASSWORD;$DIRECT \n"
exit
spawn scp $USER@$SERVER:/abc/abc*$date* /abc/$DIRECT
it will fine
页:
[1]