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
参考
本文来自博客园,作者:whilewell,转载请注明原文链接:https://www.cnblogs.com/viiv/p/15744543.html