D20

几乎所有的命令都会产生到屏幕的输出和从键盘获取输入,而在Linux系统中可以将输出发送到指定的文件,或从文件中读取输入。在一个命令执行之前,它的输入和输出可以使用由Shell解释的特殊标记重定向:即改变输入或输出的默认路径。

在Linux中一切皆文件,所以你的硬件在Linux系统中同样地表示为文件。

0:标准输入——键盘:从文件(默认是键盘)读取输入;

1:标准输出——屏幕:发送数据到文件(默认是屏幕);

2:标准错误——屏幕:发送所有错误信息到一个文件(默认是屏幕)。

上述三个数字是标准的POSIX字符,也称为文件描述符。每个Linux命令都会使用上述的流与用户或其他系统程序进行交互。

 

1. 标准输入

在Shell运行任何命令之前,它先尝试打开文件进行读取。如果打开文件失败,Shell将以一个错误退出并不运行命令;如果打开文件成功,Shell使用打开的文件的文件描述符作为命令的标准输入文件描述符。

标准输入具有以下特点:

1)它是默认的输入方法,被所有命令使用来读取输入;

2)用数字0表示;

3)也被称作stdin;

4)默认的标准输入设备是键盘。

 

操作符<是输入重定向操作符。

语法:command < input_filename

$ cat < /etc/inittab #在屏幕上显示/etc/inittab内容

 其标准输入的数据流如下图:

shell脚本默认键盘输入yes shell脚本从键盘输入_标准输出

示例:

 

 

$ cat list.txt 
ab dde
ab   dde
abde
333
a

$ sort < list.txt #利用标准输入对文件内容进行排序
333
a
ab   dde
ab dde
abde

 

 2. 标准输出

标准输出有如下特点:

1)它被命令用来写入或显示命令自身的输出;

2)它用数字1表示;

3)也被称作stdout;

4)默认的标准输出设备是屏幕。

 

操作符>是输出重定向操作符。

语法:command > output_filename

Shell首先尝试打开用于写入的文件output_filename,如果成功,就将命令的标准输出发送到新打开的文件;如果文件打开失败,整个命令就会失败。

ls > /tmp/output.txt #将ls命令的输出到output.txt文件(文件不存在会自动创建;文件存在则会被重写)

 其标准输出的数据流如下图:

shell脚本默认键盘输入yes shell脚本从键盘输入_Shell_02

 

 示例:

$ ./echonum.sh > num.txt #将脚本的输出保存到文件

 

3. 标准错误

标准错误具有如下特点:

1)它是默认的错误输出方法,被用于写入所有系统错误信息;

2)它用数字2表示;

3)也被称为stderr;

4)默认的标准输出设备是屏幕或显示器。

操作符2>是标准错误重定向操作符。

语法:command 2> errors_filename

Shell首先打开文件errors_filename用于写入,获得这个文件的文件描述符,并用它替换文件描述符2,从而将任何写到标准错误的内容被写到errors_filename。

$ cat echonum.sh 
#!/bin/bash
#202005

for ( i = 0; i < 3; i++ )) #此处错误:缺少(
do
        for (( j = 0; j < 5; j++ ))
        do
                echo -n "* "
        done

        echo ""
done

$ ./echonum.sh #直接执行脚本,标准错误输出在屏幕
./echonum.sh: line 4: syntax error near unexpected token `('
./echonum.sh: line 4: `for ( i = 0; i < 3; i++ ))'

$ ./echonum.sh 2> nums_error.txt #执行时将标准错误重定向到文件,不会输出到屏幕

$ cat nums_error.txt #查看文件内容
./echonum.sh: line 4: syntax error near unexpected token `('
./echonum.sh: line 4: `for ( i = 0; i < 3; i++ ))'

其标准错误的数据流如下图:

shell脚本默认键盘输入yes shell脚本从键盘输入_标准输入_03

 

 

本节结束

 

欢迎大家评论交流,发现博文中存在的问题一定要留言哦