Shell 标准输入输出

我们常用的两条输入输出语句

接收输入

read -p "input name:" name

将用户输入的值赋值到变量。

输出

echo $name

img

输入与输出分别对应的硬件:输入通过键盘,输出到显示器。


3个标准设备

Linux把硬件映射为设备文件,对应一个文件描述符。

项目 设备文件 文件描述符
标准输入(默认键盘) /dev/stdin &0
标准输出(默认显示器) /dev/stdout &1
标准错误(默认显示器) /dev/stderr &2

输出与错误

命令执行正确的提示结果称为输出;命令执行失败的提示结果称为错误


例1:1条ll语句同时存在输出与错误。

当前文件夹存在文件file1.txt,不存在文件file-error.txt,一条ll命令两个文件。

ll file1.txt file-error.txt

img

第1条提示为错误,第2条提示为输出

注:两个不同的流处理,没有严格按照顺序显示。


例2:两条echo

echo xiaobu
echoooo xiaobu

img

echo xiaobu的结果称为 输出;echooooo xiaobu 因为命令拼写错误,执行失败的提示结果称为 错误。显然两者都显示到显示器。


输入输出的完整写法

输入

read -p "input name:" name

read命令默认从键盘&0输入。

完整写法:

read -p "input name:" name <&0

<表示输入动作;

&0表示从键盘接收输入;

中间无空格。


输出

echo $name

echo命令默认 标准输出到&1(显示器) 标准错误还是到&2(还是显示器)。

完整写法:

echo $name 1>&1 2>&2

其中空格很少,加了会报错。

>表示输出动作;

1>表示其中的标准输出的内容的处理,&1表示显示器;

2>表示其中标准错误的内容的处理,&2表示显示器。

下一节我们会把&1,&2替换成不同文件,那么就实现:一个文件存正常内容,一个文件存错误内容。


完整内容如下:

read -p "input name:" name <&0
echo $name 1> &1 2>&2

img

运行效果与不加完全一样。成功。