Here Document
概念
使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat或read 命令。
HereDocument是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。
基本语法格式:
命令<<标记
…
…
…
标记
特殊字符"<<"在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的
stdin。标记的选择要确保不会出现在其他地方,避免出现混淆;两个标记之间的内容被当做是一个文件并用作"命令"的标准输入。另外Here Document也可以与非交互式程序和命令一起使用。
四点注意事项:
标记可以使用任意的合法字符;
结尾的标记一定要顶格写,前面不能有任何字符;
结尾的标记后面也不能有任何字符(包括空格);
开头的标记前后的空格会被省略;
[root@localhost ~]# cat <<EOF //直接把输入的从命令行输出
>hello world
>EOF
hello
[root@localhost ~]# cat > name <<EOF //输入保存到文件
>liuchun
>zhougang
>EOF
[root@localhost ~]# cat name
liuchun
zhougang
[root@localhost ~]# cat >> name <<EOF //追加输入保存到文件
>liufei
>EOF
[root@localhost ~]# cat name
liuchun
zhougang
liufei
案例1:创建yum源
[root@localhost ~]# cat > test.repo <<EOF
>[test]
>name=test
>baseurl=file:///mnt
>enabled=1
>gpgcheck=0
>EOF
另外写法1 cat < local.repo
另外写法2 tee test1.txt <<EOF
1.1通过read命令接收输入并打印,输入值是两个EOF标记之间的部分,也就是"10",这将作为变量a的值
[root@localhost ~]# read a <<EOF
>10
>EOF
[root@localhost ~]# echo $a
10
1.2通过passwd给用户设置密码
案例1:给用户创建密码
[root@localhost ~]# passwd zhangsan <<EOF
>123456
>123456
>EOF
更改用户zhangsan的密码。
新的密码:无效的密码:密码少于8个字符
重新输入新的密码: passwd:所有的身份验证令牌已经成功更新。
变量设定(支持变量替换)
2.1 在写入文件时要先将变量替换成实际值,再结合cat命令完成写入
案列1
[root@localhost ~]# aa=$(cat<<EOF //变量替换
>$a
>EOF
>)
echo $aa
案列2-支持变量替换
在写入文件时会先将变量替换成实际值,再结合cat命令完成写入
#!/bin/ bash
doc_file="KY17.txt"
i="KY17"
cat > $doc_file <<EOF
welcome to class $i
EOF
this is $i classroom
cat KY17.txt
2.2整体赋值给一个变量,然后通过echo命令将变量值打印出来。
#!/bin/bash
ivar="Great! Beautyful!"
myvar=$