imvega 发表于 2013-04-01 15:14

求高人指点: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-02 08:52

自己顶顶,盼回复

fufelixzh 发表于 2013-04-21 18:49

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]
查看完整版本: 求高人指点:shell编程_spawn传参数的问题