Linux脚本中使用expect

概述

看了很多expect的文章,写的都不够简单明了,下面自己整理了一些场景可以参考。expect功能还比较强大,这里面仅仅列出简单用法。

语法

语法-1:详细用法参考“增加新用户”场景

expect "password for" { send "$sudo_password\r" }
内容说明:
"password for":需要匹配的字符串(1. 最好不要贴完整字符串;2. 禁止包含特殊字符,否则会存在匹配问题)
"$sudo_password\r" : $sudo_password可以是变量,也可以是固定字符串;“\r”是回车

场景

增加新用户

交互过程,新增用户时需要执行sudo adduser xxx, 然后需要输入密码,然后确认信息。当需要增加多个用户时这种方式效率就有些低。

【原始交互过程】下中括号中的内容是需要输入的部分

sudo adduser xxx
[sudo] password for wsk: 【sudo_passwd】
Enter new UNIX password: 【passwd】
Retype new UNIX password: 【passwd】
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
        Full Name []: 【回车】
        Room Number []: 【回车】
        Work Phone []:【回车】
        Home Phone []:【回车】
        Other []:【回车】
Is the information correct? [Y/n] 【y】

【脚本 + expect 实现自动化创建多用户】
users: 需要增加的用户名称列表
def_password: 新增用户的默认密码
sudo_password: sudo密码

#!/bin/bash

users="
test123
abc123
"
def_password="123456"
sudo_password="123456"

for x in $users
do
    echo "============add user $x============"
expect <<EOF  
    set timeout 10 
    spawn sudo adduser $x

    expect "password for" { send "$sudo_password\r" }
    expect "Enter new UNIX password" { send "$def_password\r" } 
    expect "Retype new UNIX password" { send "$def_password\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 "Is the information correct" { send "y\r" }
    expect eof
EOF

done                             

参考

posted @ 2021-12-29 13:12  whilewell  阅读(230)  评论(0编辑  收藏  举报