Shell 脚本系统学习 · 第4篇:输入输出重定向详解

在 Linux Shell 中,一切皆文件。包括命令的输入输出,也可以像文件一样进行重定向。本篇讲透所有输入输出重定向操作符,让你写 Shell 脚本更高效更稳定!


shell学习·思维导图
https://zhimap.com/medit/c2c90a5416714b71a2d81a4b9dc3be17

一、标准输入输出基础概念

类型文件描述符默认流向
标准输入(stdin)0键盘输入
标准输出(stdout)1屏幕终端输出
标准错误(stderr)2屏幕终端输出

📌 **注意:**标准输出(1)和标准错误(2)默认都输出到终端,但我们可以通过重定向,分别输出到文件或丢弃。


二、输入重定向 <

输入重定向(Input Redirection) 是指将命令的标准输入从默认的键盘输入改为来自文件或其他输入源的过程。在 Shell 脚本或命令行中,使用 < 操作符可以实现输入重定向,使得命令可以从指定的文件读取输入而不是等待用户的键盘输入。

语法:

命令 < 输入文件

示例:

有一个bash脚本read_name.sh

#!/bin/bash
echo "请输入你的名字:"
read name
echo "你好,$name"

直接执行脚本,终端会提示输入,如果使用输入重定向,将input.txt文件中的内容重定向到终端上,就是相当于文件中的内容代替了你手动输入

有一个input.txt文件内容是人间太岁神·武松

常用于配合 readcatsort 等命令从文件读取输入。

操作符用途
<将文件内容作为命令的标准输入
<<Here Document,用于多行输入
<<<Here String,用于单行字符串输入

<< <<<我们后边的内容会讲到,不要着急!

三、输出重定向 >(覆盖)、>>(追加)

> 覆盖输出(若文件存在会被清空)

#终端执行
echo "outpot.txt文件中的内容将会被覆盖" > output.txt

output.txt 文件内容将变成:

如果 output.txt 文件 存在:

文件原有的内容会被 清空(删除),然后写入新的内容:“output.txt文件中的内容将会被覆盖”

警告:原有数据将永久丢失,不可恢复。

如果 output.txt 文件 不存在:

Shell 会自动创建一个名为 output.txt 的新文件,然后把字符串 “output.txt文件中的内容将会被覆盖” 写入进去。

>> 追加输出(不会覆盖原内容)

echo "追加输出" >> output.txt

output.txt 文件变成:

outpot.txt文件中的内容将会被覆盖
追加输出

常用于记录日志:echo "日志内容" >> log.txt

四、错误输出重定向 2>(错误流)

标准错误(stderr)默认和标准输出一样输出到屏幕,但我们可以单独将它重定向。

示例:

ll not_exist_dir 2> error.log

error.log 内容:

  • 如果not-exist-file.txt不存在,grep 会报错。
  • 报错信息(如 No such file or directory)会被写入error.log文件中,而不是显示在终端上。
ls: 无法访问not_exist_dir: 没有那个文件或目录

💡 注意:2> 是将 错误输出 重定向,而 > 是将 标准输出 重定向。


五、同时重定向标准输出与错误输出

&>:同时将标准输出和标准错误都重定向到同一文件(Bash 特有)

同时处理标准输出和标准错误输出

command > output.log 2> error.log
#正常输出写入 output.log
#错误输出写入 error.log

💡 高级技巧:将stdoutstderr都写入同一个文件

cat read_name.sh >> all_output.log 2>&1
sh error.log >> all_output.log 2>&1
cat all_output.log

  • 把标准输出写入 all_output.log

  • 2>&1 表示让标准错误输出也发送到标准输出的位置(即同一个文件)


六、/dev/null 的作用(黑洞设备)

/dev/null 是 Linux 中的“黑洞”,重定向到它的内容会被丢弃

仅丢弃输出:

command > /dev/null

丢弃错误:

command 2> /dev/null

完全静默运行命令(什么都不显示):

command > /dev/null 2>&1

示例:

ping -c 1 www.baidu.com > /dev/null 2>&1

什么都不会输出,适合脚本中安静执行命令。


重定向汇总表

符号作用
<输入重定向
>输出重定向(覆盖)
>>输出重定向(追加)
2>错误输出重定向
2>>错误输出追加
2>&1将错误输出合并到标准输出
&>同时将标准输出和错误输出重定向到文件(Bash)
/dev/null丢弃输出或错误

内容学习一个小脚本希望对你有用
递归查询输入目录下的所有子目录和文件,并按照类型(目录、文件、其他)分类输出

下一步推荐文章:

《Shell 脚本语法大全 · 第 5 篇:多命令顺序执行方式》

点赞 + 收藏 + 关注,持续更新《Shell 脚本从入门到实战》系列文章,帮你掌握自动化的核心技能!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全日记pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值