linux pgm用法,Linux shell编程:shell输入输出重定向介绍和用法完全解读

上一篇Linux

shell编程教程请查看:shell引用机制解读和用法

在本章中我们将详细讨论Shell的输入/输出重定向,大多数Unix系统命令从你的终端获取输入并将结果输出发送回你的终端,命令通常从标准输入读取输入,而标准输入就是你的终端,类似地命令通常将其输出写入标准输出,该标准输出也是你的终端。

1、输出重定向

通常用于标准输出的命令的输出可以很容易地转移到文件中,这种功能称为输出重定向。

如果将符号>文件附加到任何通常将其输出写入标准输出的命令中,则该命令的输出将写入文件而不是你的终端。

查看以下who命令,该命令重定向用户文件中该命令的完整输出。

$ who > users

注意终端上没有输出,这是因为输出已经从默认的标准输出设备(终端)重定向到指定的文件中,你可以检查用户文件以获得完整的内容:

$ cat users

aa tty01 Nov 02 13:30

bb tty15 Nov 02 05:32

cc tty21 Nov 02 01:18

$

如果命令的输出被重定向到一个文件,而该文件已经包含了一些数据,那么这些数据将会丢失如下示例:

$ echo line 1 > users

$ cat users

line 1

$

你可以使用>>操作符将输出附加到现有文件中如下所示:

$ echo line 2 >> users

$ cat users

line 1

line 2

$

2、输出重定向

正如命令的输出可以重定向到文件一样,命令的输入也可以重定向到文件。由于大于字符>用于输出重定向,小于字符

通常从标准输入获取输入的命令可以通过这种方式将其输入从文件重定向,如要计算上面生成的文件用户的行数,可以执行以下命令:

$ wc -l users

2 users

$

执行之后将收到以下输出。通过从文件用户重定向wc命令的标准输入,可以计算文件中的行数:

$ wc -l < users

2

$

注意wc命令的两种形式所产生的输出是不同的。在第一种情况下,文件用户的名称与行数一起列出;在第二种情况下它不是。

对于第一种情况,wc知道它正在从文件用户读取输入。在第二种情况下,它只知道从标准输入读取输入,因此不显示文件名。

3、本地文档

本地文档用于将输入重定向到交互式shell脚本或程序,我们可以在shell脚本中运行交互式程序而无需用户操作,方法是为交互式程序或交互式shell脚本提供所需的输入,这里的文件的一般形式是:

command << delimiter

document

delimiter

在这里shell将<

分隔符告诉shell这里的文档已经完成,没有它shell将永远继续读取输入,分隔符必须是不包含空格或制表符的单个单词,下面是命令wc -l的输入用于计算行总数:

$wc -l << EOF

balabala

just test

content......

EOF

3

$

你可以使用本地文档使用脚本打印多行如下所示:

#!/bin/bash

cat << EOF

balabala

just test

content......

EOF

下面的脚本使用vi文本编辑器运行一个会话,并将输入保存在test.txt文件中。

#!/bin/bash

filename=test.txt

vi $filename <

i

blabalabla

^[

ZZ

EndOfCommands

4、取消输出

有时你需要执行一个命令,但不希望在屏幕上显示输出,在这种情况下,可以通过将输出重定向到文件/dev/null来取消输出:

$ command > /dev/null

这里的命令是要执行的命令的名称,文件/dev/null是一个自动丢弃所有输入的特殊文件。

若要丢弃命令的输出及其错误输出,请使用标准重定向将标准重定向到标准输出:

$ command > /dev/null 2>&1

这里2表示STDERR, 1表示STDOUT。通过将STDOUT重定向到STDERR,可以将消息显示到STDERR如:

$ echo message 1>&2

5、重定向命令

以下是可用于重定向的命令的完整列表:

编号命令 & 描述

1pgm > file

pgm的输出被重定向到文件

2pgm < file

程序pgm从文件中读取输入

3pgm >> file

pgm的输出被附加到文件中

4n > file

描述符n重定向到文件的流的输出

5n >> file

描述符n附加到文件中的流的输出

6n >& m

将流n的输出与流m合并

7n

将来自流n的输入与流m合并

8<< tag

标准输入从这里通过行首的下一个标记

9|

从一个程序或进程获取输出,并将其发送到另一个程序或进程

注意文件描述符0通常是标准输入(STDIN), 1是标准输出(STDOUT), 2是标准错误输出(STDERR)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值