shell学习之expect命令-创新互联

本文主要包括两个部分:expect命令的使用示例和对该示例进行说明。

银川网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联公司公司2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

1.   expect命令的使用示例

    IP=192.168.1.18
    PASS=passwd
    expect -c "
             settimeout 60;
             spawn ssh root@192.168.0.1
             expect{
                     \"*yes/no*\"{send \"yes\r\"; exp_continue}
                     \"*password*\"{send \"$PASS\r\";}
                    }
                    expect eof"

2.   针对示例,对expect命令的使用进行说明

(1)   -c 标志之后的命令在任何脚本之前执行,该命令应当被引用以防止被 shell 破坏。

(2)   set timeout 60:设置超时时间,计时单位为秒,timeout -1 为永不超时。

(3)   spawn是expect的初始命令,用于启动一个进程,之后所有的expect操作都在这个进程中进行,如果没有spawn语句,整个expect就无法进行下去,当然,如果真的不要spawn过程也没有关系,虽然这样就没有办法单独执行,但是这个脚本可以与任何调用它的进程进行交互。

(4)   expect用于等候一个相匹配的输出,一旦匹配就执行后面的动作。在这个例子中,expect是依附于spawn命令的,当spawn后面的命令执行完毕后,expect命令就匹配命令执行后的关键词(yes/no),如果匹配到,就执行后面{ }中动作。

(5)   expect的匹配可以看做是一个循环,通常匹配之后都会退出语句,但如果有exp_continue,则可以不断循环匹配。在该例子中,遇到“yes/no”时,送出“yes”,然后继续expect,遇到密码提示时,送出密码,送完后退出。

(6)   eof是必须去匹配的,在 spawn 进程结束后会向 expect 发送 eof;如果不去匹配,有时也能运行,比如 sleep 多少秒后再去 spawn 下一个命令,但是不要依赖这种行为,很有可能今天还可以,明天就不能用了。但是,如果不需要spawn的进程结束,不能 expect eof 了,如下面的例子:

      #!/usr/bin/expect
 
      set timeout 30
      spawn ssh 10.192.224.224
      expect"password:"
      send"mypassword\n"
      expect "*$"
      send "mkdirtmpdir\n"
      expect"*$"

手动操作时 ssh 实际上也不会自己结束除非你 exit;所以你只能expect bash 的提示符,当然也可以是机器名等,这样才可以在远程创建一个目录。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:shell学习之expect命令-创新互联
文章链接:http://azwzsj.com/article/deeieh.html