当前位置:首页 >> 编程语言 >> 【Shell】Shell编程之免交互,秘密结社鹰之爪

【Shell】Shell编程之免交互,秘密结社鹰之爪

cpugpu芯片开发光刻机 编程语言 1
文件名:【Shell】Shell编程之免交互,秘密结社鹰之爪 【Shell】Shell编程之免交互

免交互:不需要人为控制就可以完成的自动化操作

自动化运维

Shell脚本和免交互是一个概念,但是两种写法

here document        使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令

                                是一种标准输入,只能接受正确的指令或命令(错误的不行)

格式: 命令 <<标记......标记 注意事项:

1.标记可以使用合法的字符(通常使用EOF,也可以自定义)

2.结尾的标记一定要顶格写,并于开头的标记一致;后标记的前后不能有任何字符

3.如果开头的标记前有空格,这个空格会被自动省略

结合免交互实现重定向输出到指定文件 cat <<EOF>> test.txt> 1> 2 > 3> 4> 5> EOF[root@test1 opt]# lstest.txt work7.15[root@test1 opt]# cat test.txt 12345          免交互创建文件并写入内容 [root@test1 opt]# vim test.sh #!/bin/bashfile="test.txt"i="school"cat > $file <<EOFI am goning to $iEOF[root@test1 opt]# sh test.sh [root@test1 opt]# lstest.sh test.txt[root@test1 opt]# cat test.txt I am goning to school[root@test1 opt]#        去掉每行之前的tab字符 [root@test opt]# vim test.txt cat <<-'EOF'ky30bogeEOF[root@test opt]# sh test.txt ky30boge         多行注释

        ***Expect免交互

tcl基础语言之上的一种工具;自动化测试和控制,主要是在脚本中解决人机交互的问题

which expect        查看服务的位置rpm -qa expect 查看服务是否安装 转义符:\n 换行\t 制表符,TAB\r 回车\b 删除键 基本命令格式: #!/usr/bin/expect #使用时需要先在开头生命使用expect 执行方式:

1.必须赋权执行;给权限(chmod 777)

2.不能用 bash和sh        只能使用./

语法:spawn 后面通常跟一个linux的执行命令,表示开启一个会话,启动一个进程,并且跟踪后续的交互信息 spawn passwd 用户名        #跟踪(修改用户密码)命令的执行情况

expect    捕获上一次执行的命令中,是否包含指定的字符串,如果有则立即返回,否则等待超时时间(默认10秒),超时时间自动退出 expect只能捕获有spawn启动的进程输出

        send向进程发送字符串,用于模拟用户输入;该命令不能自动回车,一般后面要加一个回车键(/r或/n)

        第一种写法: expect "密码" {send "abc123\r"}         第二种写法: expect ""send "abc123\r"         第三种写法:多分支结构

多分支语句,只要匹配一个就会执行相应的send语句,然后就退出expect

expect{"密码1" {send "123\r"}"密码2" {send "123\r"}"密码3" {send "123\r"}} 结束符: expect eof        会切换回之前的终端interact          保留当前终端不变 设置超时时间 set timeout5 获取不到,5秒后会自动退出set timeout-1 -1表示永不超时

exp_continue

可以在expect判断之后,继续匹配expect捕获的其他内容,类似于脚本中continue,表示允许继续向下执行命令

exp_contine        结束语句不能直接使用expect eof,否则会报错

expect{"(yes/no)" {send "yes\r";exp_continue}"password" {send "123\r"}}send_user 回显信息,相当于echo,跟上用户想要输出的内容send_user ok 打印ok

接收参数:类似于shell当中的位置变量$1 $2

set 变量名 [lindex $argv 0] $1set 变量名 [lindex $argv 1] $2

嵌入模式:涉及到终端切换时,最好不要用嵌入模式写

#!/bin/bashuser=$1passwd=$2useradd $user/usr/bin/expect <<-EOFspawn passwd $userexpect ""send "${passwd}\r"expect ""send "${passwd}\r"interactEOF ssh远程登录

通过免交互脚本实现自动远程登录

#!/usr/bin/expectset ip 192.168.220.30 #指定远程登录的IP地址set user root #指定登录root用户set password 123 #设定密码为123set timeout 5 #设定超时时间spawn ssh $user@$ipexpect {"yes/no" {send "yes\r";exp_continue}"password" {send "$password\r"}}expect eof

传参自动登录

#!/usr/bin/expectset name [lindex $argv 0]set ip [lindex $argv 1]set password [lindex $argv 2]set timeout 5spawn ssh $name@$ipexpect {"refused" {send_user "访问被拒绝\r"}"No route to host" {send_user "主机名或者IP地址有误!\n"}"yes/no" {send "yes\r";exp_continue}"password" {send "$password\r"}}expect eof

实验:

用免交互的方式给硬盘分区,格式化,和挂载

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接