shell脚本免交互

一、Here Document 概述

使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。
HereDocument是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。

基本语法格式:

命令 <<标记
...
...
...
标记

特殊字符“<<”在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的 stdin。标记的选择要确保不会出现在其他地方,避免出现混淆;两个标记之间的内容被当做是一个文件并用作“命令”的标准输入。另外 Here Document 也可以与非交互式程序和命令一起使用。

四点注意事项:

  • 标记可以使用任意的合法字符;
  • 结尾的标记一定要顶格写,前面不能有任何字符;
  • 结尾的标记后面也不能有任何字符(包括空格);
  • 开头的标记前后的空格会被省略
[root@localhost ~]# cat <<EOF   //直接把输入的从命令行输出
> hello world
> EOF
hello world
 
[root@localhost ~]# cat > name <<EOF   //输入保存到文件
> li
> wang
> EOF

[root@localhost ~]# cat name
li
wang


[root@localhost ~]# cat  <<EOF >> name   //追加输入保存到文件
> zhang
> EOF

[root@localhost ~]# cat name 
li
wang
zhang

1.1、案例

1.1.1、案例1:创建yum源

[root@localhost ~]# cat > test.repo <<EOF
> [test]
> name=test
> baseurl=file:///mnt
> enabled=1
> gpgcheck=0
> EOF


另外写法1 cat <<EOF > local.repo
另外写法2 tee test1.txt <<EOF

1.1.2、read变量免交互

通过 read 命令接收输入并打印,输入值是两个 EOF 标记之间的部分,也就是“10”,这将作为变量 a 的值

[root@localhost ~]# read a <<EOF
> 10
> EOF
[root@localhost ~]# echo $a
10

1.1.3、通过 passwd 给用户设置密码

案例1:给用户创建密码
[root@localhost ~]# passwd yycc <<EOF
> 123456
> 123456
> EOF

更改用户 yycc 的密码 。(需要有这个用户)
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

1.1.4、变量设定(支持变量替换)

在写入文件时要先将变量替换成实际值,在结合 cat 命令完成写入

这个也就是变量替换

[root@localhost ~]# aa=$(cat <<EOF    //变量替换
> $a
> EOF
> )

echo $aa

(有问题)写在shell中示例

#!/bin/bash
doc="hh.txt"
ii="yc66"
cat > $doc<<EOF
hi  $ii
EOF
cat hh.txt

整体赋值给一个变量,然后通过 echo 命令将变量值打印出来。

#/bin/bash
ivar="very beautyful"
myvar=$(cat <<EOF
$ivar
EOF
)
echo $myvar

1.1.5、格式控制

关闭变量替换的功能,按照字符原本的样子输出,不做任何修改或替换关闭变量替换

就是关闭行内的变量

#!/bin/bash
i="tkl"
kk=$(cat <<'EOF'
$i
EOF
)
echo $kk

1.1.6、去掉每行之前的 TAB 字符

在第一行的标记前面加‘-’,这个表示要抑制各行首 TAB 的作用。

#!/bin/bash
cat <<EOF
        hello world
EOF

cat <<-EOF
        hello world
EOF

1.1.7、多行注释

Bash 的默认注释是“#”,该注释方法只支持单行注释,在 Shell 脚本的工作中,“#”右侧的任何字符串,bash 都会将其忽略。

Here Document 的引入解决了多行注释的问题,:”代表什么都不做的空命令。中间标记区域的内容不会被执行,会被bash忽略掉,因此可达到批量注释的效果。

 #多行注释 以 :开头的Here Document标记内容不会被执行(正常是cat)

#!/bin/bash
a=hhh
: <<-EOF
the nh .
echo $a
EOF
echo "djh"

未完待续

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值