expect命令在shell脚本中的应用

    技术2024-10-28  22

    在shell编程中,经常会用到命令的交互,此时就需要在shell中嵌套expect命令

    单独使用expect语法参考该文。

    expect 嵌套在shell中

    方法1)shell中使用     expect -c “expect脚本内容”       来完成嵌套

      例1:test.sh中内容:

    #!/bin/sh echo "begin" #echo 是shell语法 expect -c " spawn su root expect \":\" send \"root\r\" send \"ls\r\" expect eof " echo "end"

     注意:

    此时第一行就可以使用默认的脚本版本  #!/bin/sh,而不用使用#!usr/bin/expect(即便用的话,echo会报错)因为实在 expect -c ""   双引号之中,所以,双引号中的双引号都要用转义字符\,否则会报错(ps:测试expect “:”中引号不加\却能正常执行,why?)在最后一个root终端中会等10s ,才打印的end;expect 中除交互命令外的命令可以用send 直接发送。

    例2: 

    #!/bin/sh echo "begin" expect -c " spawn su root expect \":\" send \"root\r\" send \"whoami\r\" expect eof " whoami

     可以看到expect eof  结束后,就已经退回到了普通用户(python ),虽然终端显示的仍然是root终端(why?)python是在最后一个root终端等待10s后才显示的。

    例3:可以连续多次使用 spawn 命令,即使没有交互也可以用,当然没有什么交互效果,此时也可以不写,参考例2 

    #!/bin/sh echo "begin" expect -c " spawn su root expect \":\" send \"root\r\" expect \"root\" send \"whoami\r\" expect eof " expect -c " spawn whoami expect eof "

     

     

    方法2)expect <<EOF    expect脚本内容     EOF

    #!/bin/sh echo "begin" expect <<EOF spawn su root expect ":" send "root\r" expect "root" send "whoami\r" expect eof EOF whoami

     

     效果与使用expect -c "" 等同。

    Processed: 0.011, SQL: 9