天天看点

标准输入输出

标准输入输出和管道 

三种输入和输出设备

把输出和输入重定向到文件

使用管道连接命令

一.标准:

    输入(STDIN)-0,默认是键盘鼠标的输入窗口

    输出(STDOUT)-1,默认设备当前终端窗口

    错误(STDERR)-2,默认当前终端窗口

1:

打开的文件都有一个fd: file descriptor (文件描述符)

标准输入输出

二,输入输出重定向;改变文件位置

1,> 把输出STDOUT重定向到文件

   2>把STDERR重定向到文件

   &>把所有输出重定向到文件

     > 文件内容会被覆盖 

    >> 原有内容基础上,追加内容

   < 标准输入的重定向

把标准输出,切换到别的终端;用>号。如下图所示

标准输入输出
标准输入输出

2,定向到文件,如果文件名不存在,它会自己生成文件名

如果说再往 ls.log里定向一个文件,那么它的原有数据就会覆盖

举例:下图以ls为例

标准输入输出

3.把错误的重定向到文件,用2>号。如下图所示

标准输入输出

如果>号前边不加2 ,就系相当与把文件清空了文件里什么也没有

如下图

标准输入输出

4,如果想把错误的和正确的都放一个文件里,得用&>

如下图所示

标准输入输出

5,如果想错的对的都放一块,如下图所示

标准输入输出

旧版本的系统支持2>&1,2>&1必须放到最后,命令如下图所示

标准输入输出

6,把两个命令的标准输出,都定向到一个文件里。得用(命令:命令 )

标准输入输出

7,>> 追加到一个文件,数据不会覆盖,如下图

标准输入输出

8.>标准输入的重定向,可以代替键盘输入的信息,进行一些批量的处理。

命令如下发一个邮件,执行完后输入内容,最后输.结束

标准输入输出

如果我想群发邮件,可以用nano mail.txt ,在里面写上内容 ,就不用一个一个写了。

标准输入输出

然后使用标准输入群发邮件。命令如下图

标准输入输出

9<<标准输入多行重定向 导入到文件里,输入e结束才会存到f1里.

如下图,

标准输入输出

三,tr命令是转换和删除字符的命令

选项:

-c或——complerment:取字符集的补集

-d或——delete:删除所有属于第一字符集的字符;

-s或—squeeze-repeats:把连续重复的字符以单独一个字符表示

-t或--truncate-set1:先删除第一字符集较第二字符集多出的字符

1,转小写字符为大写字符,而且可以用标准输入。把全部文件的内容转换为大写,并且定向到f1文件,注意的是/etc/issue本身没有转换为大写,只是一个输入源。下图

标准输入输出

2,tr -d ‘abc ’删除abc 打头的字符

标准输入输出

3,tr -s ‘x’把重复的x 用单个的x 来表示

标准输入输出

4可以横变竖排序

标准输入输出

5  -c 除了补集,全部替换

标准输入输出

一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:

Hello, I am 用户名,the system version is here,pleasehelp me to check it ,thanks!

操作系统版本信息

标准输入输出

管道

(使用符号“|”表示)用来连接命令

命令1 | 命令2 | 命令3 | …

将命令1的输出(STDOUT)发送给命令2的输入(STDIN),命令2的输出(STDOUT)发送到命令3的输入(STDIN)

管道接收的是标准输出,而不是错误。

标准输入输出

如:Cat 是标准输出,通过管道传给mail,作为它的标准输入

标准输入输出

错误STDERR默认不能通过管道转发,可利用2>&1 或|& 实现

如:下图,错误也行,正确也行

标准输入输出

管道也可多次处理,如下图把AD删了。

标准输入输出

如果用tee 命令可以在文件里和桌面两面显示,如下图

标准输入输出

还可以在转换,删掉回车换行符。下图

标准输入输出

set命令

set -c 可以禁止覆盖 ,set +c 可以取消覆盖。

注意,禁止了换个终端或退出登录它不生效。

一般编写脚本用set -c, 防止覆盖,写完正在set+c取消。

1将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中,下图。

标准输入输出

2将/root/下文件列表,显示成一行,并文件名之间用空格隔开。

标准输入输出

继续阅读