为Linux创建一个Expect脚本" adduser"命令

时间:2016-09-21 06:48:27

标签: linux expect

对于Expect来说,我是一个新手,而且我认为只要先在我的本地机器上尝试预期,我就会弄湿我的脚。

为此,我想我会尝试对抗" adduser"命令。

我无法让它正常工作,似乎一切正常,我能够到达最后一个提示,它确实退出,但用户仍未创建。

我做错了什么?

Array((banana,Array((John,1))), (guava,Array((Tom,1), (John,1))), (orange,Array((Tom,1))), (apple,Array((Steve,1), (John,2))), (mango,Array((Tom,2), (Steve,1), (John,1))))

2 个答案:

答案 0 :(得分:1)

将以下内容另存为'automateUser'... chmod 775 ...,然后在命令行中保存。

sudo期望-d automateUser

#!/usr/bin/expect

spawn adduser testuser

expect "Enter new UNIX password" { send "testpass\r" }
expect "Retype new UNIX password" { send "testpass\r" }
expect "Full Name" { send "\r" }
expect "Room Number" { send "\r" }
expect "Work Phone" { send "\r" }
expect "Home Phone" { send "\r" }
expect "Other" { send "\r" }
expect "correct?" { send "y\r" }

interact

如果在/ etc / passwd之后键入的内容较少,则应该在列表中看到测试用户。

  • 添加-d开关可以使期望行为表现得更加可预测,这对于调试非常有用
  • 期望-s可以是精确的也可以是宽松的(例如,完全匹配与“包含”)
  • 某些操作可能需要root ...,例如adduser

针对Ubuntu 16.04(预期版本为5.45)进行了测试。

答案 1 :(得分:0)

看起来所有这些都是错误的:wc -l

我会使用expect " Something []: "

  1. 使用“精确”匹配,因为您不需要全局或正则表达式模式的强大功能,
  2. 大括号确保括号不被解释为Tcl命令替换语法。