在使用shell脚本时候,总会遇到交互性的命令,会提示输入密码,用户名之类的。这时候就需要使用expect了。
例如:
set username
[lindex
$argv 0
]
set hostname [lindex
$argv 1
]
set upload_name
[lindex
$argv 2
]
set dst_dir
[lindex
$argv 3
]
set password
[lindex
$argv 4
]
spawn
scp -r
$upload_name $username@$hostname:$dst_dir
set timeout 3
expect { "yes/no"
{send
"yes\r";exp_continue
}
}
expect "$username@$hostname's password:"
set timeout 3
send
"$password\r"
set timeout 300
send
"exit\r"
expect eof
这里通过
set password [lindex $argv num]
从脚本外部传入参数,这里需要与传统的shell脚本做一个区别。 然后通过spawn、expect、send完成对交互式命令scp的操作。其他的ftp、tftp等等也可以仿照这个来写。