shell交互输入yes(求大神指点,跪谢叻,用shell 编程实现如下功能点:)

本文目录
- 求大神指点,跪谢叻,用shell 编程实现如下功能点:
- 请教,shell如何模拟键盘输入字符
- 如何用shell脚本实现ubuntu用户自动登录
- Linux Shell中如何自动输入命令需要接受的键盘输入
- 如何让shell脚本自动回答 yes或者no
- 如何在linux下shell编写脚本中模拟键盘输入
求大神指点,跪谢叻,用shell 编程实现如下功能点:
你是linux还是unix的?
简单提供一下linux的方案:
linux自带expect脚本,先分别实现几个子动作:1.执行存储过程。2.ftp(get)。3.ftp(put)
expect脚本里基本分为expect语句和send语句。就是屏幕期望什么,我就上送什么。
例如:
spawn
sftp
p10@128.196.55.79
#由于第一次sftp需要输入yes,所以这里加入判断
expect
{
"(yes/no)?"
{send
"yes\r";exp_continue}
}
expect
"assword:
"
send
"p10\r";
expect
"sftp》"
send
"lcd
/home/p10\n";
expect
"sftp》"
send
"cd
/home/mydata\n";
expect
"sftp》"
send
"mget
*\n"
expect
"sftp》"
send
"exit\n"
expect
eof
这是一个sftp的expect脚本,里面的lcd,cd,mget什么的你应该都懂。
你也可以照这个写一个sqlplus的expect脚本。
然后再写一个shell调用expect脚本。
如果没有expect,就这样:
ftp
-nv《《!
open
128.192.20.11
user
username
passwd
cd
/home/mydata
get
aaa.txt
close
bye
!
请教,shell如何模拟键盘输入字符
举个例子:
做Docker构建镜像的练习,写了下面这个 Dockerfile 文件,其中 yum install tomcat 执行过程中需要用键盘输入两次字符”y”以便确认选项,Dockerfile 脚本命令如下:
FROM centos
MAINTAINER quicmous "xuyeping@yeah.net"
RUN yes y | head -2 | yum install tomcat -y
RUN echo ’Hi, I am in your container’
EXPOSE 8012345
其中 yes 命令可以无限重复产生其后面的字符”y”,head 命令只选择其中两次重复输入,也就是两个字符”y”。命令行
yes y | head -2 | yum install tomcat -y
可以自动完成全部操作,中间过程不需要人工干预。
如何用shell脚本实现ubuntu用户自动登录
安装
CentOS下安装命令很简单,如下
sudo yum install expect
至于Mac用户,可以通过homebrew安装(需要先安装homebrew,请自行Google)
brew install expect
测试脚本
我们写一个简单的脚本实现scp拷贝文件,在脚本里配置密码,保存为scp.exp如下
#!/usr/bin/expect
set timeout 20
if { 《 2} {
puts "Usage:"
puts "$argv0 local_file remote_path"
exit 1
}
set local_file
set remote_path
set passwd your_passwd
set passwderror 0
spawn scp $local_file $remote_path
expect {
"*assword:*" {
if { $passwderror == 1 } {
puts "passwd is error"
exit 2
}
set timeout 1000
set passwderror 1
send "$passwd\r"
exp_continue
}
"*es/no)?*" {
send "yes\r"
exp_continue
}
timeout {
puts "connect is timeout"
exit 3
}
}
注意,第一行很重要,通常我们的脚本里第一行是#!/bin/bash,而这里是你机器上expect程序的路径,说明这段脚本是由expect来解释执行的,而不是由bash解释执行,所以代码的语法和shell脚本也是不一样的,其中set passwd your_passwd设置成你自己的密码,然后执行如下命令
./scp.exp ./local_file user@host:/xx/yy/
执行前确保scp.exp有执行权限,第一个参数为你本地文件,第二个为远程主机的目录,运行脚本如果报错“connect is timeout”,可以把超时设长一点,第二行set timeout 20可以设置超时时间,单位是秒。脚本执行效果如下
还能做什么
细心的同学一定发现了,其实expect提供的是和终端的一种交互机制,输入密码只是其中一种应用形式,只要是在终端阻塞需要输入时,都可以通过expect脚本完成自动输入,比如前面脚本里配置了两种交互场景,一种是终端提示"password:"时输入密码,还有一种是提示"yes/no)?"时输入“yes”,如果和远程主机是第一次建立连接,执行scp.exp脚本效果是这样的
所以我们可以根据终端的提示来配置输入命令,这样就能达到了自动化的效果。至于处理其它交互场景,只需要照着上面的脚本依葫芦画瓢就行了
Linux Shell中如何自动输入命令需要接受的键盘输入
传递交互式参数的话,你可以试试这种,比如创建分区的一个例子:
echo "p 主分区
1 第一分区
指定默认从1开始
+200M 分区200M
t 更改分区类型
若只有一个则不需要指定分区
8e lvm分区
w" | fdisk /dev/sdb
如何让shell脚本自动回答 yes或者no
使用ls -al后若有文件的话会用-表示如\r\n-rw-r--r--. 1 root root 973 Aug 15 13:36 fstab\r\n可以这样\r\n \r\nls -al \/opt |grep "^-"|wc -l 这个命令能够统计文件个数 为0就是没有文件 非零就是有文件\r\n \r\n#!\/bin\/bash\r\nNum=`ls -al \/opt |grep "^-"|wc -l `\r\nif \r\n then echo "\/opt has $Num files"\r\nelse\r\n echo "\/opt has none file"\r\nfi\r\n希望能帮到你
如何在linux下shell编写脚本中模拟键盘输入
用 yes 命令
如 yes 123 可以不停的输出 123,你可以用 yes 123 | head -3 输出三次。
然后你要是要对某个程序做输入,你用输入重定向。
如果你说的是应答,那就用 expect,具体的用法就复杂了,自己搜教程系统地学习吧。

本文相关文章:
shell判断文件是否存在(shell下用ls判断多个文件是否存在txt的文本)
2026年9月17日 05:00
checkbox选中属性(怎样设置checkbox是否选中)
2026年8月12日 01:40
shell脚本或者怎么表示(shell脚本实现逻辑关系与、或、非)
2026年7月27日 21:00
mettlesome(the mettlesome steed by his breed)
2026年7月26日 07:10
更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30




