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内容
其标准输入的数据流如下图:
示例:
$ 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文件(文件不存在会自动创建;文件存在则会被重写)
其标准输出的数据流如下图:
示例:
$ ./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++ ))'
其标准错误的数据流如下图:
本节结束
标签:文件,echonum,Shell,输出,标准,sh,Linux,输入
来源: https://www.cnblogs.com/workingdiary/p/13024828.html