目录
一、Here Document 免交互
1.免交互定义
使用io重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或read命令。是标准输入的一种替代品。可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个“文件”并用作“命令”的标准输入。Here Document也可以与非交互式程序和命令一起使用。
2.格式和使用方法
命令 <<标记 //标记可以使用任意合法字符(通常为EOF)
...
内容
...
标记 //结尾标记必须顶格,后面也不能跟任何字符
//1.wc -l 统计读取到多少行
[root@localhost1 ~]#wc -l <<EOF
> a
> b
> c
> EOF
3
//2.read免交互给变量赋值(只会读取第一行内容)
[root@localhost1 ~]#read i <<EOF
> 123
> 456
> EOF
[root@localhost1 ~]#echo $i
123
//3.免交互修改用户密码
[root@localhost1 ~]#passwd zhangsan <<EOF
> abc1234
> abc1234
> EOF
更改用户 zhangsan 的密码 。
新的 密码:无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
搭配tee使用
tee //同时支持标准输入和标准输出(默认效果是覆盖)
tee -a //追加输出和输入
[root@localhost1 ~]#cat > test.txt <<EOF
> hello
> world
> EOF
[root@localhost1 ~]#cat test.txt
hello
world
[root@localhost1 ~]#tee test.txt <<EOF
> 123
> 456
> 789
> EOF
123
456
789
[root@localhost1 ~]#cat test.txt
123
456
789
[root@localhost1 ~]#tee -a test.txt <<EOF
> abc
> def
> EOF
abc
def
[root@localhost1 ~]#cat test.txt
123
456
789
abc
def
搭配变量使用
[root@localhost1 ~]#vim test.sh
#!/bin/bash
file="test.txt"
name="zhangsan"
cat > $file << EOF
my name is $name
EOF
[root@localhost1 ~]#cat test.txt
my name is zhangsan
实现多行注释
Bash 的默认注释是#,该注释方法只支持单行注释;Here Document 的引入解决了多行注释的问题。(这里只做介绍,一般还是建议使用#做注释)
标记前加 : 代表什么都不做的空命令。中间标记区域的内容不会被执行,会被bash 忽略掉,因此可达到批量注释的效果。
[root@localhost1 ~]#vim test.sh
#!/bin/bash
: << EOF
以下为注释的内容
A=abc
n=123
EOF
echo $A
echo $n
//输出了两个空值
[root@localhost1 ~]#bash test.sh
二、Expect 免交互
1.简介
Expect 是建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题。需要安装