shell介绍(九)--shell 输入/输出重定向

目录

1. 标准输入/输出/错误流

2. 基本重定向

输出重定向 < 和 >

示例:

输入重定向 < 的变体 <<

示例:

输出重定向 >

示例:

3. 错误重定向 2>

示例:

4. 合并标准输出和标准错误 &>

示例:

5. 文件描述符重定向 <() 和 >(...)

示例:

6. 重定向和管道的组合使用

示例:

7. 重定向与脚本调试

示例:

8. 使用 exec 重新定义标准流

示例:

总结


 

在Unix/Linux Shell脚本中,输入/输出重定向(Input/Output redirection)是一种非常强大的功能,允许你改变程序的标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的目标。通过重定向,你可以将程序的输出发送到文件而不是屏幕,或者将文件的内容作为程序的输入而不是键盘输入。以下是对输入/输出重定向的基础介绍及其使用方法。

1. 标准输入/输出/错误流

  • 标准输入(stdin):默认从键盘读取输入,文件描述符为0。
  • 标准输出(stdout):默认输出到终端屏幕,文件描述符为1。
  • 标准错误(stderr):默认输出到终端屏幕,文件描述符为2。

2. 基本重定向

输出重定向 < 和 >

  • < 用于将文件内容作为程序的标准输入。
  • > 用于将程序的标准输出重定向到一个文件。

示例:

 

bash

深色版本

1# 将文件内容作为程序的输入
2wc < input.txt
3
4# 将程序的输出重定向到文件
5ls > files.list

输入重定向 < 的变体 <<

  • << 用于将内联文本作为程序的标准输入。

示例:

 

bash

深色版本

1# 使用内联文本作为输入
2cat <<EOF > output.txt
3This is a multi-line string.
4It can span multiple lines.
5EOF

输出重定向 >

  • > 用于覆盖现有文件或创建新文件。
  • >> 用于追加到现有文件或创建新文件。

示例:

 

bash

深色版本

1# 覆盖文件
2echo "Overwriting file." > file.txt
3
4# 追加到文件
5echo "Appending to file." >> file.txt

3. 错误重定向 2>

  • 2> 用于将标准错误输出重定向到文件。

示例:

 

bash

深色版本

1# 将错误输出重定向到文件
2ls /nonexistent/directory 2> errors.log

4. 合并标准输出和标准错误 &>

  • &> 用于同时重定向标准输出和标准错误到同一个文件。

示例:

 

bash

深色版本

1# 同时重定向标准输出和标准错误
2ls /nonexistent/directory &> combined.log

5. 文件描述符重定向 <() 和 >(...)

  • <() 用于将命令的输出作为程序的标准输入。
  • >(...) 用于将程序的输出重定向到一个命令。

示例:

 

bash

深色版本

1# 使用命令的输出作为输入
2wc <(echo "Hello"; echo "World")
3
4# 将输出通过管道传递给另一个命令
5echo "Hello" >(tee -a log.txt | sed 's/H/h/')

6. 重定向和管道的组合使用

重定向可以与管道一起使用,以实现更复杂的输入/输出流控制。

示例:

 

bash

深色版本

1# 通过管道将输出重定向到文件
2ls | grep "txt" > txtfiles.list
3
4# 从文件读取输入并通过管道处理
5cat input.txt | sort > sorted.txt

7. 重定向与脚本调试

重定向对于调试脚本也非常有用,你可以将标准输出和标准错误分开记录,以便更容易分析问题所在。

示例:

 

bash

深色版本

1# 分别记录标准输出和标准错误
2command > stdout.log 2> stderr.log

8. 使用 exec 重新定义标准流

exec 命令可以用来永久地重新定义标准输入、输出或错误流。

示例:

 

bash

深色版本

1# 重新定义标准输出
2exec > logfile.txt
3echo "This message goes to the log file."
4
5# 重新定义标准输入
6exec < input.txt
7cat # Reads from input.txt instead of keyboard
8
9# 重新定义标准错误
10exec 2> errors.log
11echo "An error occurred." >&2

总结

通过输入/输出重定向,你可以更加灵活地控制程序的数据流向,这对于脚本编写和系统管理都非常有用。掌握了这些基本概念后,你可以根据需要设计复杂的重定向方案,以满足特定的需求。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值