Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

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

$
0
0

文件描述符(fd):文件描述符是一个非负整数,在打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来访问文件。

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

6.1 标准输入、输出和错误

文件描述符

描述

映射关系

0 标准输入,键盘 /dev/stdin -> /proc/self/fd/0 1 标准输出,屏幕 /dev/stdout -> /proc/self/fd/1 2 标准错误,屏幕 /dev/stderr -> /proc/self/fd/2

6.2 重定向符号

符号

描述

> 符号左边输出作为右边输入 >> 符号左边输出追加右边输入 < 符号右边输出作为左边输入 << 符号右边输出追加左边输入 | 管道符,左边输出作为右边输入 & 与重定向符号一起使用

6.3 输出重定向

使用方法

描述

示例

cmd1 | cmd2 cmd1标准输出作为cmd2的标准输入 ls列出当前所有目录或文件,将结果作为grep的输入:ls |grep a cmd > file 将cmd的标准输出重定向到file 打印结果写到文件:echo "test" > a.txt cmd >> file 将cmd的标准输出重定向追加到file 打印结果追加到文件:echo "test" >> a.txt cmd 2> file 将cmd的标准错误重定向到file

当没有安装bc计算器时,错误输出结果写到文件:

echo "1 + 1" |bc 2> error.log

cmd 2>> file 将cmd的标准错误重定向追加到file

当没有安装bc计算器时,错误输出结果追加文件:

echo "1 + 1" |bc 2> error.log

cmd &> file 将cmd标准错误和标准输出重定向到file

当不确定执行对错时都写到文件:

echo "1 + 1" |bc &> error.log

cmd &>> file 将cmd标准错误和标准输出重定向追加file

当不确定执行对错时都写到文件:

echo "1 + 1" |bc &>> error.log

cmd > file 2>&1 将标准错误重定向到标准输出,再重定向到file 与&>一样 cmd >> file 2>&1 将标准错误重定向到标准输出,再重定向追加到file 与&>>一样

6.4 输入重定向

使用方法

描述

示例

cmd < file cmd以file作为标准输入

a.txt内容作为grep输入:

# grep "test" --color < a.txt

cmd < file1 > file2 cmd命令以file1文件作为标准输入,并将标准输出重定向到file2

把a.txt标准输出写到b.txt:

# cat < a.txt > b.txt

cmd << delimiter 读取标准输入,直到遇到delimiter终止,数字、字符串任意命名delimiter。

# cat << EOF

> 123

> abc

> EOF

123

abc

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

# cat > a.txt << eof

> 123

> abc

> eof

6.5 绑定重定向

使用方法

描述

示例

cmd >&n 把标准输出重定向到文件描述符n

将ls标准输出重定向标准错误,标准错误重定向到file:

ls >&1 1>file

cmd <&n 标准输入重定向到文件描述符n cmd <&- 关闭标准输入 cmd >&- 关闭标准输出 cmd n>&- 将文件描述符n标准输入关闭 cmd n<&- 将文件描述符n标准输出关闭

6.6/dev/null

/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 博客地址:http://lizhenliang.blog.51cto.com QQ群:Shell/python运维开发群 323779636

6.7 read

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

命令格式: read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] -e 在一个交互shel

Viewing all articles
Browse latest Browse all 11063

Trending Articles