Shell programming 9


在学习的过程中,不仅要输入知识,也要运用知识,更要选择性的丢弃某些东西。


SHELL=[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]

progress:[################## ] 90%


Ax Shell Input/Output Redirections | 学思

万物都轮回的,两面性的,好的坏的,真的假的,有的没的,数据也是如此,有进来的也有出去的。

系统命令从终端接收输入,然后将结果输出发送会终端。

Output Redirection | 输出重定向

用于标准输出的命令也可以输出重定向到文件中。

使用> 重定向到文件,而不是终端

$ who > users

终端不会有任何显示

$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$

但如果文件存在数据,会将数据覆盖。 −

$ echo line 1 > users
$ cat users
line 1
$

如果不想覆盖,使用>> 操作符 −

$ echo line 2 >> users
$ cat users
line 1
line 2
$

Input Redirection | 输入重定向

同样,文件也可以作为命令的输入,使用<操作符。

$ wc -l users
2 users
$

重定向到命令统计行数 −

$ wc -l < users
2
$

因为使用了重定向,wc命令只知道输入的内容,并不知道文件名。

Here Document | Here 文档

here document 用于将输入重定向到交互式shell脚本或程序中。

通过为交互shell脚本提供输入,可以在脚本中运行交互程序,无需用户操作。

例 −

command << delimiter
document
delimiter

<<读取输入的指令,直到找到指定分隔符的行,然后将分隔符内的内容提供给标准输入。

没有分隔符将永远等待输入。分隔符是一个不能有空格和制表符的单词。

下面是一个计算总数的操作 −

$wc -l << EOF
   This is a simple lookup program 
    for good (and bad) restaurants
    in Cape Town.
EOF
3
$

放入脚本中 −

#!/bin/sh

cat << EOF
This is a simple lookup program 
for good (and bad) restaurants
in Cape Town.
EOF    

执行 −

This is a simple lookup program
for good (and bad) restaurants
in Cape Town.

将文本保持到文件中,打开一个vi会话.

如果你使用vim,将会报错如下 −

$ sh test.sh
Vim: Warning: Input is not from a terminal
$

运行脚本后,就会看文件内已经有了内容 −

$ cat test.txt
This file was created automatically from
a shell script
$

Discard the output | 丢弃输出

如果不希望命令执行的输出显示在屏幕上,可以重定向到 /dev/null

$ command > /dev/null

null会丢弃所有的输入

如果需要将错误输出也丢弃,将错误输出重定向到标准输出

$ command > /dev/null 2>&1

2表示 STDERR (标准错误,1表示标准输出。通过将标准输出重定向标准错误,可以将消息显示在标准错误中。

$ echo message 1>&2

Redirection Commands | 重定向命令

重定向命令列表 −

Sr.No. Command & Description
1 pgm > file 输出重定向
2 pgm < file 输入重定向
3 pgm >> file 追加输出重定向
4 n > file将文件描述符输出重定向
5 n >> file追加输出文件描述符重定向
6 n >& m将流n与m合并
7 n <& m 将流n与m合并
8 << tag 标准输入标记内的内容
9 | 从一个程序或进程获取的输出发送给另一个进程

PS:0 是标准输入,1是标准输出,2是标准错误


文章作者: Enomothem
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Enomothem !
  目录