Shell 标准输入输出
我们常用的两条输入输出语句
接收输入
read -p "input name:" name
将用户输入的值赋值到变量。
输出
echo $name
输入与输出分别对应的硬件:输入通过键盘,输出到显示器。
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
第1条提示为错误,第2条提示为输出。
注:两个不同的流处理,没有严格按照顺序显示。
例2:两条echo
echo xiaobu
echoooo xiaobu
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
运行效果与不加完全一样。成功。