网站备案要营业执照吗,广州学建网站,联想网站建设摘要,wordpress 又一个一、Here Document概述
1.概念 使用I/0重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 2.语法格式 命令 标记 标记 3.注意事项 标记可以使用任意合法字符#xff08;通常为EOF#xff09; 结尾的标记一定要顶格写#xff0c;前面不能有任何字符…一、Here Document概述
1.概念 使用I/0重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 2.语法格式 命令 标记 ··· ··· 标记 3.注意事项 标记可以使用任意合法字符通常为EOF 结尾的标记一定要顶格写前面不能有任何字符 结尾的标记后面也不能有任何字符(包括空格) 开头标记前后的空格会被省略掉 二、Here Document免交互
1、通过read命令接受输入并打印
通过 read 命令接收输入并打印输入值是两个 EOF 标记之间的部分作为变量 i 的值
[rootlocalhost jiaohu]#read a EOFthis is a testhello worldEOF
[rootlocalhost jiaohu]#echo $a[rootlocalhost jiaohu]#read a jieweithis is a test2jiewei
[rootlocalhost jiaohu]#echo $a
2、通过 passwd 给用户设置密码
passwd lisi EOF
abc1234 #输入的密码
abc1234 #确认密码
EOF
3、支持变量替换
#!/bin/bash
fileEOF1.TXT
iscj
cat $file EOF
His name is $i
EFO[rootlocalhost ~]# vim demo21.sh
[rootlocalhost ~]# bash demo21.sh
[rootlocalhost ~]# His name is scj4、整体赋值给变量然后通过 echo 命令将变量值打印出来
#!/bin/bash
varGreat! I am going to school!
myvar$(cat EOF
This is Line 1.
Today is Monday.
$var
EOF
)echo $myvar
5、多行注释
Bash 的默认注释是“#”该注释方法只支持单行注释Here Document 的引入解决了多行注释的问题。“:”代表什么都不做的空命令。中间标记区域的内容不会被执行会被bash 忽略掉因此可达到批量注释的效果。
#!/bin/bashvarthis is test1var1$(cat EOF
this is test2
this is test3
$var
EOF
)
echo $var1
6、tee命令重定向输出加标准输出 [rootlocalhost jiaohu]#tee test2.txt EOFthis is tee testEOF
this is tee test
[rootlocalhost jiaohu]#cat test2.txt 三、Expect基本命令
1、Expect概念 建立在tcl之上的一个工具 用于进行自动化控制和测试解决shel脚本中交互相关的问题 2、Expect安装 挂载光盘 制作本地YUM源 执行安装命令 3、使用方法 1脚本解释器 expect 脚本中首先引入文件表明使用的是哪一个 shell。 #!/usr/bin/expect
2spawn spawn 后面通常跟一个Linux执行命令表示开启一个会话、启动进程并跟踪后续交互信息。 例spawn passwd root
3expect 判断上次输出结果中是否包含指定的字符串如果有则立即返回否则就等待超时时间后返回 只能捕捉由spawn启动的进程的输出用于接收命令执行后的输出然后和期望的字符串匹配
4send 向进程发送字符串用于模拟用户的输入该命令不能自动回车换行一般要加\r回车或者\n
方式一
expect 密码 {send abc123\r} #同一行send部分要有{}方式二
expect 密码
send abc123\r #换行send部分不需要有{}方式三
expect支持多个分支expect #只要匹配了其中一个情况执行相应的send语句后退出该expect语句
{
密码1 {send abc123\r}
密码2 {send 123456\r}
密码3 {send 123123\r}
}5结束符 expect eof 表示交互结束等待执行结束退回到原用户与spawn对应。 比如切换到root用户expect脚本默认的是等待10s当执行完命令后默认停留10s后自动切回了原用户
interact 执行完成后保持交互状态把控制权交给控制台会停留在目标终端而不会退回到原终端这个时候就可以手工操作了interact后的命令不起作用比如interact后添加exit并不会退出root用户。而如果没有interact则登录完成后会退出而不是留在远程终端上。 使用interact会保持在终端而不会退回到原终端比如切换到root用户会一直在root用户状态下比如ssh到另一服务器会一直在目标服务器终端而不会切回的原服务器。
6set expect 默认的超时时间是 10 秒通过 set 命令可以设置会话超时时间, 若不限制超时时间则应设置为-1。 示例set timeout 30 7exp_continue exp_continue 附加于某个 expect 判断项之后可以使该项被匹配后还能继续匹配该 expect 判断语句内的其他项。exp_continue 类似于控制语句中的 continue 语句。表示允许 expect 继续向下执行指令。
8send_user send_user 表示回显命令相当于 echo
9接收参数 expect 脚本可以接受从bash命令行传递的参数使用[lindex $argv n]获得。其中n从0开始分别表示第一个,第二个,第三个....参数。 示例 set hostname [lindex $argv 0] 相当于 hostname$1 set password [lindex $argv 1] 相当于 password$2 4、Expect执行方式
1、expect直接执行
su切换用户
#!/usr/bin/expect
#设置超时时间
set timeout 5
#参数传入
set username [lindex $argv 0]
set password [lindex $argv 1]
#开始追踪命令
spawn su $username
#免交互执行捕捉信息并匹配
expect 密码
send $password\r
expect *]#
send_user ok
#把控制权交给控制台
interact
#expect eof
2、嵌入执行模式
创建用户并设置密码
#!/bin/bash
user$1
password$2
#非交互命令放在expect外面
useradd $user
#开始免交换执行
/usr/bin/expect -EOF #expect 开始标志
spawn passwd $user #开启一个进程跟踪 passwd 命令expect 只能捕捉该进程信息expect 新的*
send ${password}\r
expect 重新*
send ${password}\r
expect eof
EOF
四、Export脚本示例
1、实现ssh自动登录
#!/usr/bin/expect
set timeout 5
set hostname [lindex $argv 0]
set password [lindex $argv 1]spawn ssh $hostname
expect {Connection refused {send_user ssh访问被拒绝\n} #连接失败情况比如对方ssh服务关闭No route to host {send_user 主机名/IP有误\n} #找不到服务器比如输入的IP地址不正确(yes/no) {send yes\r;exp_continue}password: {send $password\r}
}interact
exit #interact后的命令不起作用
2、创建磁盘分区并格式化
方法一
#!/bin/bash
NEWDEVls /dev/sd*|grep -o sd[b-z]|uniq
for VAR in $NEWDEV
doecho -e n\np\n\n\n\nw\n | fdisk /dev/$VAR /dev/null
donemkfs.xfs /dev/${VAR}1 /dev/null
方法二
echo -e n\np\n\n\n\nw\n fd.txt
fdisk /dev/$VAR fd.txt
方法三
echo npw | fdisk /dev/$VAR