xshell编程之免交互(EOF以及expect免交互)
一、Here Document 免交互
1.相关概念
-
使用I/O重定向的方式将命令列表提供给交互式程序,比如ftp、cat或read命令
-
是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就生产出一个“文件”并用作“命令”的标准输入。Here Document 也可以与非交互式程序和命令一起使用。
2.语法格式
命令 <<标记
...
#标记之间是传入内容
...
标记
3.注意事项
- 标记可以使用任意合法字符(通常为EOF)
- 结尾的标记一定要顶格写,前面不能有任何字符
- 结尾的标记后面也不能有任何字符(包括空格)
- 开头标记前后的空格会被省略掉
4.免交互示例
1)免交互方式实现对行数的统计
[root@localhost ~]#wc -l <<EOF
> 123
> 456
> qwe
> asd
> EOF
4
2)通过read命令接收输入并打印
注:只能赋值一行内容
[root@localhost ~]#read i <<EOF
> hello
> nihao
> EOF
[root@localhost ~]#echo $i
hello
[root@localhost ~]#read i <<EOF
> hahaha nihao
> EOF
[root@localhost ~]#echo $i
hahaha nihao
3)通过passwd给用户设置密码
注:密码需要输入两次
[root@localhost ~]#passwd ww &> /dev/null <<EOF
> 123123 #这两行是输入的密码和确认的密码
> 123123
> EOF
[root@localhost ~]#su ww1 #由于root用户切换到普通用户不需要密码,所以想要验证密码是否更新就需要先切换到一个普通用户,然后再切换到更改密码的普通用户
[ww1@localhost root]$ su ww #输入更改后的密码,登录成功
密码:
[ww@localhost root]$
4)支持变量替换
在写入文件时会先将变量替换成实际值,再结合 cat 命令完成写入
[root@localhost /免交互] # vim th.sh
[root@localhost /免交互] # ls
th.sh
[root@localhost /免交互] # cat th.sh #查看脚本内容
#!/bin/bash
file="th.txt"
i="home"
cat > $file <<EOF
I am going $i
EOF
[root@localhost /免交互] # chmod +x th.sh
[root@localhost /免交互] # ./th.sh #执行脚本
[root@localhost /免交互] # ls #执行脚本以后会发现自动建了个文件
th.sh th.txt
[root@localhost /免交互] # cat th.txt #查看文件,变量已被替换
I am going home
5)整体赋值给变量
整体赋值给变量,然后通过echo命令将变量值打印出来
[root@localhost /免交互] # vim ztfz.sh
[root@localhost /免交互] # chmod +x ztfz.sh
[root@localhost /免交互] # ./ztfz.sh
今天周一了。 好唉!今天要上班了!
[root@localhost /免交互] # cat ztfz.sh
#!/bin/bash
var="好唉!今天要上班了!"
myvar=$(cat <<EOF
今天周一了。
$var
EOF
)
echo $myvar
注:在上面的脚本最后,用echo -e "myvar"可以实现换行</