专业做网站设计哪家好百度点击率排名有效果吗
shell脚本的编写一方面为了减少我们命令的输入,另一方面也可以进行简单的自动化运行,其中为了实现自动化过程,一个很重要的点就是免交互,本篇文章跟大家简单分享两个常用的免交互的方法。
Here Document
-  
Here document
-  
通过内联重定向实现免交互——有关资料请参考内联输入重定向-CSDN博客
 -  
基本格式
-  
命令 <<标记
 -  
。。。
 -  
。。。
 -  
标记
 -  
-   
注意事项:
标记:标记可以是任何”合法字符“,尽量大写,方便区分。 -  
结尾的结束标记一定要顶格写,且除了结束标记本身外不能有任何字符。
 -  
开始标记前后的空格会被 省略
 -  
开头标记加上单引号‘’表示不解释变量
 -  
开头标记前加-表示忽略制表符或空格
 -  
:<<EOF
 -  
EOF
-  
注释的一种方式两个EOF中间的会被省略
 
 -  
 -  
在脚本内书写该语句时要注意空格的使用,因为这个错误很难被发现。
 
 -   
 
 -  
 -  
例
-  
设置密码的免交互
[root@localhost ~]# useradd zhangsan [root@localhost ~]# passwd zhangsan<<EOF > 111 > 111 > EOF -  
支持使用变量
-  
在脚本中添加如下语句
-  
#!/bin/bash a="aa.txt" b="ni hao" cat > $a << EOF 我要对你说$b EOF执行结果为我要对你说aa.txt 
 -  
 
 -  
 -  
整体赋值给变量
-  
[root@localhost ~]# vim bb.sh #!/bin/bash a="很高兴认识你" b=$(cat <<EOF 你好, $a EOF ) echo $b执行该脚本后结果为你好, 很高兴认识你 -  
 
 -  
 
 -  
 
 -  
 
expect
-  
expect
-  
基础依赖TCL语言,是一种工具命令语言,在特定环境下使用的特殊命令,仅适用该特定环境
 -  
软件包
-  
expec
 
 -  
 -  
术语概念
-  
expect
-  
表示判断,输出的内容中是否包含指定字符串
-  
判断语句只识别英文,标点符号可以省略
 
 -  
 
 -  
 -  
send
-  
发送,可以发送字符串,命令之类
 
 -  
 -  
spawn
-  
开启一个会话
-  
常跟系统命令
 -  
该命令不能作为远程客户端的发起者
 
 -  
 
 -  
 -  
set
-  
常用设置:设置超时响应时间:set timeout 秒
-  
针对spwan多一些,跳过该命令以及后续的判断语句。
 
 -  
 -  
在expect环境中定义变量
-  
set “变量”
 
 -  
 -  
接收本地主机位置参数
-  
set 变量名 [ lindex $argv 0 ]
 -  
set 变量名 [ lindex $argv 1 ]
 
 -  
 
 -  
 -  
exp_continue
-  
附加于expect后用{ exp_continue}
-  
例
 -  
#!/usr/bin/expect spawn ssh root@192.168.10.102 expect { "*yes/no" {send "yes\r"; exp_continue} "password: " { send "aptech\r"; } } interact“ ”内表示判断语句 { }内表示要执行的expect的命令如:send,exp_continue-  
” “内表示判断语句, { }内表示要执行的expect的命令如:send
 -  
exp_continue,用于一个程序发起两次交互请求才用。
 
 -  
 
 -  
 
 -  
 -  
expect eof
-  
执行完毕后,仅仅退出整个expect环境
-  
自动化任务常用
 
 -  
 
 -  
 -  
interact
-  
执行完毕后停留在当前的expect环境中:例如远程登陆后停留在远程终端执行远程终端的命令。并不退出expect环境。
 
 -  
 -  
需要注意两种退出选项只能选其一
 -  
\r
-  
expect中的的换行符号
-  
默认不换行需要在双引号结尾前添加
 
 -  
 
 -  
 -  
exec
-  
在expect环境中执行bash命令
 -  
工作方式
-  
在本地主机开启子进程来进行指令的操作
 
 -  
 
 -  
 
 -  
 -  
例
-  
免交互登录远程服务器
-  
用expect作解释器
 -  
#!/usr/bin/expect spawn ssh root@192.168.10.102 expect { "*yes/no" {send "yes\r"; exp_continue} "password: " { send "aptech\r"; } } interact注意expect后{ }内书写的格式,以及exp_continue的使用-  
注意expect后{ }内书写的格式,以及exp_continue的使用
 
 -  
 
 -  
 -  
用bash作为解释器
-  
创建用户并设置密码
-  
#!/bin/bash user=$1 password=$2 useradd $user expect << EOF spawn passwd $user expect "New password:" send "${password}\r" expect "Retry new password:" send "${password}\r"expect eof EOF注意EOF会让expect环境完全退出,在bash环境中无法留存到目标终端的expect环境中-  
注意EOF会让expect环境完全退出
 
 -  
 
 -  
 
 -  
 
 -  
 -  
免交互设计思路
-  
确定解释器
 -  
第一步
-  
将需要免交互的操作执行一遍,确定固定的关键字。
 
 -  
 -  
第二步
-  
根据上一步的关键字设置expect判断语句,选用合适的书写形式
 
 -  
 
 -  
 
 -  
 
以上就是关于在shell脚本中两种免交互的设计方式,如果有任何疑问欢迎留言,看到会及时答复,
