#输入重定向背景
在计算机发展早期,程序与用户之间的交互主要依赖于标准输入(通常是键盘)和标准输出(通常是屏幕)。但
随着计算机处理的数据量不断增大,以及自动化任务的需求日益增长,单纯依靠人工从键盘输入数据变得效率低
下且容易出错。为了解决这些问题,输入重定向的概念应运而生。它允许程序从文件、其他程序的输出或者特殊
设备(/dev/zero)中获取输入数据,而不仅仅局限于键盘,从而提高了数据处理的效率和自动化程度。
#输入重定向定义
输入重定向是一种机制,它改变了程序获取输入数据的来源。通常情况下,程序默认从标准输入(如键盘)读取
数据,但通过输入重定向,程序可以从文件、管道或其他数据源读取数据。
#交互式命令和非交互式命令介绍
交互式命令是指在执行过程中需要用户与命令进行交互的命令。用户通过输入信息、回答问题或选择选项等方式
来与命令进行交互,以完成特定的任务。如vi/vim、nano,bash等命令都是交互式命令。
非交互式命令是指在执行过程中不需要用户直接干预,而是按照预先设定的参数和指令自动执行的命令。这些命
令通常用于批量处理任务、脚本编写或在后台运行。比如cp,mv,rm等文件管理命令。
输入重定向可以将某些交互式命令转换成非交互式命令。通过输入重定向,可将命令的输入来源从默认的标准输
入(通常是键盘)重定向到文件或其他输出源,从而实现命令执行过程无需人工实时输入。
#输入重定向 < 无处不在
其实无论是cat命令还是grep命令都是等待用户提供数据的命令,都是交互式命令,只不过cat是1比1将用户提
供的输入进行输出,grep命令是将用户提供的输入进行筛选后进行输出。所谓的cat和grep指定文件,本质上
是通过输入重定向将文件的内容作为输入送给命令,进而代替用户通过键盘输入。
[xzq@xzq-almalinux ~]$ cat example.txt
1111
2222
3333
[xzq@xzq-almalinux ~]$ cat < example.txt
1111
2222
3333
[xzq@xzq-almalinux ~]$ grep "apple" < fruits.txt
#bc命令进行计算
bc 是一个任意精度的计算器语言,bc默认情况下采用交互式的方式实现计算,当使用输入重定向 < 可以让它
从文件读取计算表达式。
[xzq@xzq-almalinux ~]$ bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
#加法
2+3
5
#乘法
5*6
30
#除法
#设置精度
scale=10
10/3
3.3333333333
#幂运算
2^10
1024
#使用ctrl+d退出
[xzq@xzq-almalinux ~]$ cat data.txt
3 + 5
5 * 8
[xzq@xzq-almalinux ~]$ bc < data.txt
8
40
#输入重定向<<基础使用
<< 输入重定向,它被称为Here Document。它允许用户在命令行中直接输入多行文本作为命令的输入,而无
需从文件中读取。Here Document 的基本语法如下:
command << delimiter
这里是输入的文本内容
可以有多行
delimiter
delimiter 是用户自定义的分隔符,用于标识输入文本的开始和结束。当命令遇到 delimiter 时,它会将
之前输入的所有文本作为标准输入传递给 command。
delimiter 是用户自定义的分隔符,用于标识输入文本的开始和结束。当命令遇到 delimiter 时,它会将
之前输入的所有文本作为标准输入传递给 command。
#最经典的<<示例
cat << END
这是第一行文本。
这是第二行文本。
END
上述命令中,cat 命令会将 << END 和 END 之间的文本内容输出到终端。Here Document 常用于需要向
命令提供多行输入的场景,如向文本处理命令提供模板文本,或向交互式程序提供一系列输入等。
cat <<XZQ
咖啡还没喝完,我已经在Linux里创建了三个文件夹,比我工位还整洁。
同事问我为啥对着黑框框笑,因为刚用grep找到藏了三天的配置文件。
老板说要提高效率,我默默打开终端,这才是打工人的效率密码。
XZQ
[xzq@xzq-almalinux ~]$ cat <<XZQ
咖啡还没喝完,我已经在Linux里创建了三个文件夹,比我工位还整洁。
同事问我为啥对着黑框框笑,因为刚用grep找到藏了三天的配置文件。
老板说要提高效率,我默默打开终端,这才是打工人的效率密码。
XZQ
咖啡还没喝完,我已经在Linux里创建了三个文件夹,比我工位还整洁。
同事问我为啥对着黑框框笑,因为刚用grep找到藏了三天的配置文件。
老板说要提高效率,我默默打开终端,这才是打工人的效率密码。
[xzq@xzq-almalinux ~]$
#经典中的经典-<<和输出重定向的结合
cat > /tmp/file1.txt <<END
任何你在file1.txt文件中添加的内容
内容行1
内容行2
...
内容行n
END
通俗说就是:先让 cat “读取出内容”(比如读文件、直接输的文字),再用 > 或 >> 把这些内容 “送进目标文档”——> 是清空原有内容再送,>> 是顺着原有内容往后加。
cat > /tmp/xzq-linux.txt <<end
当Linux命令行打了个哈欠,所有进程都暂停了0.5秒。
ls命令偷偷给每个文件改了昵称,只是我们肉眼看不到。
cd命令其实是个路痴,有时候需要多敲几次才找对地方。
最调皮的是rm,总爱在删除前故意咳嗽一声"警告"。
end
[xzq@xzq-almalinux ~]$ cat /tmp/xzq-linux.txt
当Linux命令行打了个哈欠,所有进程都暂停了0.5秒。
ls命令偷偷给每个文件改了昵称,只是我们肉眼看不到。
cd命令其实是个路痴,有时候需要多敲几次才找对地方。
最调皮的是rm,总爱在删除前故意咳嗽一声"警告"。
cat > /tmp/xzq-linux.txt <<end
这行内容会覆盖掉文件里所有旧内容
end
cat >> /tmp/xzq-linux.txt <<end
这行内容会加在文件最后面
end
#提前介绍一下shell脚本的思想
1.shell脚本其实就是Linux命令的集合体
2.⼀个shell脚本⾥⾯可以有N个Linux命令
3.shell脚本⾥⾯要尽可能的是⾮交互式命令
4.这样才能让脚本在不需要人参与的情况下"自己动"

被折叠的 条评论
为什么被折叠?



