码迷,mamicode.com
首页 > 其他好文 > 详细

与bash script脚本自动化交互

时间:2016-05-12 23:01:07      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

如果bash脚本中一些命令需要手工输入进行交互的时候,那么脚本的自动化就没法进行下去。比如:ssh somehost需要输入用户名和密码,脚本运行到这个命令后,便会停止,等待用户输入。
如果在简单情景下,比如只需要用户输入一次,即一次性交互时,可以直接这样:

# ... some directives here

# Remove the machine, confirming "y" when asked by docker-machine
echo ‘y‘ | docker-machine rm default

# ... more directives here

通常情况下需要expect工具。使用expect自动化ssh登陆的示例如下:

#timeout is a predefined variable in expect which by default is set to 10 sec
#spawn_id is another default variable in expect.
#It is good practice to close spawn_id handle created by spawn command
set timeout 60
spawn ssh $user@machine
while {1} {
  expect {

    eof                          {break}
    "The authenticity of host"   {send "yes\r"}
    "password:"                  {send "$password\r"}
    "*\]"                        {send "exit\r"}
  }
}
wait
close $spawn_id

另外一个telnet的例子:

# Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier
# in the script.
# Open a telnet session to a remote server, and wait for a username prompt.
spawn telnet $remote_server
expect "username:"
# Send the username, and then wait for a password prompt.
send "$my_user_id\r"
expect "password:"
# Send the password, and then wait for a shell prompt.
send "$my_password\r"
expect "%"
# Send the prebuilt command, and then wait for another shell prompt.
send "$my_command\r"
expect "%"
# Capture the results of the command into a variable. This can be displayed, or written to disk.
set results $expect_out(buffer)
# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof

与bash script脚本自动化交互

标签:

原文地址:http://blog.csdn.net/bdss58/article/details/51346948

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!