Shell 标准输入、输出和错误

防伪码:桃花潭水深千尺,不及汪伦送我情。

文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个

文件描述符,读写文件也需要使用文件描述符来访问文件。

内核为每个进程维护该进程打开的文件记录表。文件描述符只适于 Unix、Linux 操作系统。

8. 1  标准输入、输出和错误

文件描述符  描述  映射关系

0  标准输入,键盘  /dev/stdin -> /proc/self/fd/0

1  标准输出,屏幕  /dev/stdout -> /proc/self/fd/1

2  标准错误,屏幕  /dev/stderr -> /proc/self/fd/2

8.2  重定向符号

符号  描述

>  符号左边输出作为右边输入(标准输出)

>>  符号左边输出追加右边输入

<  符号右边输出作为左边输入(标准输入)

<<  符号右边输出追加左边输入

&  重定向绑定符号

输入和输出可以被重定向符号解释到 shell。

shell 命令是从左到右依次执行命令。

下面 n 字母是文件描述符。

8.3  重定向 输出

1)覆盖输出

一般格式:[n]>word

如果 n 没有指定,默认是 1

示例:

打印结果写到文件:echo "test" > a.txt

当没有安装 bc 计算器时,错误输出结果写到文件:echo "1 + 1" |bc 2> error.log

2)追加重定向输出

一般格式:[n]>>word

如果 n 没有指定,默认是 1

示例:

打印结果追加到文件:echo "test" >> a.txt

当没有安装 bc 计算器时,错误输出结果追加文件:echo "1 + 1" |bc 2> error.log

8.4 4 重定向输入

一般格式:[n]<word

如果 n 没有指定,默认是 0

示例:

a.txt 内容作为 grep 输入:grep "test" --color < a.txt

8.5 5 重定向标准输出和标准错误

1)覆盖重定向标准输出和标准错误

两种格式重定向标准输出和标准错误:

&>word 和>&word 等价于>word 2>&1

&将标准输出和标准输入绑定到一起,重定向 word 文件。

示例:

当不确定执行对错时都覆盖到文件:echo "1 + 1" |bc &> error.log

当不确定执行对错时都覆盖到文件:echo "1 + 1" |bc > error.log 2>&1

2)追加标准输出和标准错误

追加格式:&>>word 等价于>>word 2>&1

当不确定执行对错时都追加文件:echo "1 + 1" |bc &>> error.log

将标准输出和标准标准输入追加重定向到 word:

<<[-]word

here-document

delimiter

从当前 shell 读取输入源,直到遇到一行只包含 delimiter 终止,内容作为标准输入。

将 eof 标准输入作为 cat 标准输出再写到 a.txt:

# cat <<eof

123

abc

eof

123

abc

# cat > a.txt << eof

> 123

> abc

> eof

8.6  重定向到 空设备

/dev/null 是一个空设备,向它写入的数组都会丢弃,但返回状态是成功的。与其对应的还有一个

/dev/zero 设备,提供无限的 0 数据流。

在写 Shell 脚本时我们经常会用到/dev/null 设备,将 stdout、stderr 输出给它,也就是我们不想

要这些输出的数据。

通过重定向到/dev/null 忽略输出,比如我们没有安装 bc 计算器,正常会抛出没有发现命令:

# echo "1 + 1" |bc >/dev/null 2>&1

这就让标准和错误输出到了空设备。

忽略标准输出:

# echo "test" >/dev/null

忽略错误输出:

# echo "1 + 1" |bc 2>/dev/null

d 8.7 read  命令

read 命令从标准输入读取,并把输入的内容复制给变量。

命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p

prompt] [-t timeout] [-u fd] [name ...]

-e  在一个交互 shell 中使用 readline 获取行

-r  不允许反斜杠转义任何字符

-s  隐藏输入

-a array  保存为数组,元素以空格分隔

-d delimiter  持续读取直到遇到 delimiter 第一个字符退出

-i text  将 test 文本作为

-n nchars  读取 nchars 个字符返回,而不是等到换行符

-N nchars  读取 nchars 个字符返回,除非遇到文件结束符或超时,其他分隔符都被忽略

-p prompt  提示信息

-t timeout  等待超时时间,秒

-u fd  指定文件描述符号码作为输入,默认是 0

name  变量名

示例:

获取用户输入保存到变量:

# read -p "Please input your name: " VAR

Please input your name: lizhenliang

# echo $VAR

lizhenliang

用户输入保存为数组:

# read -p "Please input your name: " -a ARRAY

Please input your name: a b c

# echo ${ARRAY[*]}

a b c

遇到 e 字符返回:

# read -d e VAR

123

456

e

# echo $VAR

123 456

从文件作为 read 标准输入:

# cat a.txt

adfasfd

# read VAR < a.txt

# echo $VAR

adfasfd

while 循环读取每一行作为 read 的标准输入:

# cat a.txt |while read LINE; do echo $LINE; done

123

abc

分别变量赋值:

# read a b c

1 2 3

# echo $a

1

# echo $b

2

# echo $c

3

# echo 1 2 3 | while read a b c;do echo "$a $b $c"; done

1 2 3

谢谢观看,真心的希望能帮到您!

时间: 2024-11-05 06:33:39

Shell 标准输入、输出和错误的相关文章

第六章 Shell标准输入、输出和错误

文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来访问文件. 内核为每个进程维护该进程打开的文件记录表.文件描述符只适应Unix.Linux操作系统. 6.1 标准输入.输出和错误 文件描述符 描述 映射关系 0 标准输入,键盘 /dev/stdin -> /proc/self/fd/0 1 标准输出,屏幕 /dev/stdout -> /proc/self/fd/1 2 标准错误,屏幕 /dev/stderr -

Linux shell的标准输入、输出和错误

编译文件时,若编译过程时间长,可以将  标准错误  重定向  输出到一个文件中   2 > 1.txt         也可以通过管道  重定向 到 标准输出    2 > &1 Linux shell的标准输入.输出和错误 标签: linux shellshell重定向 2013-08-19 20:42 30403人阅读 评论(0) 收藏 举报  分类: 系统运维(42)  版权声明:本文为博主原创文章,未经博主允许不得转载. 1.文件描述符 在linux shell执行命令时,每个

Linux shell标准输入,标准输出,错误输出

shell中可能经常能看到:1>/dev/null  2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件> 代表重定向到哪里,例如:echo "123" > /home/123.txt1 表示stdout标准输出,系统默认值是1

Linux标准输入、输出和错误和文件重定向(转)

标准输入.输出和错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名.下面就是这些文件描述符及它们通常所对应的文件名: 文件文件描述符输入文件—标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出.输出文件—标准输出1:它是命令的输出,缺省是屏幕,也可以是文件.错误输出文件—标准错误2:这是命令错误的输出,缺省是屏幕,同样也可以是文件. 系统中实际上有1 2个文件描

[转帖]Linux的标准输入 标准输出和错误输出

https://www.cnblogs.com/softidea/p/3965093.html 感觉自己对 这一块的理解一直不好 昨天同事给了一个 bat 文件也用到了标准输入 直接通过文件进行输入 脚本参数内容 比之前写脚本参数容易的多也规整的多 今天再看 linux的标准输入和标准输出 尤其是哪一句 2>&1 将错误输出 重定向到标准输出 自己竟然一直没有理解到 & 其实是地址符号的意思.. 这一块是在是太low了. 当我们在shell中执行命令的时候,每个进程都和三个打开的文件

Shell标准输出、标准错误

shell中可能经常能看到:>/dev/null 2>&1 eg:sudo kill -9 ps -elf |grep -v grep|grep $1|awk '{print $4}' 1>/dev/null 2>/dev/null 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 ">" 代表重定向到哪里,例如:echo "123" > /home/123.txt 1 表示stdout标准

重定向标准输入/输出

Java的标准输入/输出分别通过System.in和System.out来代表,默认情况下它们分别代表键盘和显示器,当程序通过System.in来获取输入时,实际上是从键盘读取输入,当程序试图通过System.out执行输出时,程序总是输出到屏幕 System类里提供三个重定向标准输入/输出的方法: static void setErr(PrintStream err):重定向"标准"错误输出流 static void setIn(InputStream in):重定向"标准

输出,错误,输出追加,错误追加重定向的使用

输出,错误,输出追加,错误追加重定向的使用,不仅可以让我们轻松的实现多个命令的内容用一个文件实现,也让我们对Linux有了更深的了解. 程序:指令+ 数据 读入数据:Input 输出数据:Output 打开的文件都有一个fd: file descriptor ( 文件描述符) Linux 给程序提供三种I/O 设备 标准输入(STDIN )-0 默认接受来自键盘的输入 标准输出(STDOUT )-1 默认输出到终端窗口 标准错误(STDERR )-2 默认输出到终端窗口 1.使用输出重定向创建文

Java重定向标准输入/输出

在System类中提供了三个重定向标准输入/输出的方法static void setErr(PrintStream err) 重定向“标准”错误输出流static void setIn(InputStream in)    重定向“标准”输入流static void setOut(PrintStream out)重定向“标准”输出流 参考 http://blog.csdn.net/zhy_cheng/article/details/7891142