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

文件描述符(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

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

Shell 标准输入、输出和错误相关推荐

  1. shell如何将标准错误输出重定向为标准输出

    shell如何将标准错误输出重定向为标准输出 经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用 /tmp/test.sh > /tmp/test.log 2>& ...

  2. Shell 标准输入和输出

    无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出.程序要做的第一件事就是处理如同一阴一阳的"输入与输出". 1 .从文件获取输入 当我们希望向文件输出内容时, ...

  3. linux输出文件没有找到,Linux环境下标准输入、输出、错误信息详解

    Linux环境下标准输入.输出.错误信息详解 下面我们介绍在Linux环境下标准输入.输出.错误设备.标准输入设备代号为0, 用来显示输入信息,标准输出设备代号为1,用来显示正常信息,标准错误设备代号 ...

  4. Shell——输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  5. [linux] shell 输入/输出重定向 、 文件包含

    Shell 输入/输出重定向 大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回​​到终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是自己的终端.同样,一个命令通常将 ...

  6. 分享:Linux标准输入/输出和重定向

    1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和标准错误输出文件(stderr), ...

  7. 标准输入/输出和重定向

    1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘:标准输出文件(stdout)和 标准错误输出文件(stderr) ...

  8. Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向

    ​ 最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! ​ Shell 函数 1. 自定义函数 linux she ...

  9. linux语法错误 未预期的文件结尾,centos shell运行报语法错误: 未预期的文件结尾...

    shell脚本启动语法错误syntax error near unexpected token &#39;{ 执行shell脚本时失败,报语法错误,但脚本内容检查正常 原因为该脚本是在非Lin ...

最新文章

  1. 洛谷P2380 狗哥采矿
  2. C++ 对TXT 的串并行读写
  3. java file ip_java常用工具类 IP、File文件工具类
  4. CentOS6.9下ssh密钥登录配置步骤(免密码登录)和ssh-keygen 命令常用参数
  5. C# 序列化之二进制
  6. [转载] python3 格式化字符串 f-string 介绍
  7. excel下载模版(数据字典)
  8. 计算机基础作业3考试客户端答案,2015年12月份考试作业计算机基础第3次作业满分答案...
  9. 信息泄露事件频发 快递行业的隐私面单之战
  10. 物联网与嵌入式系统的关系
  11. VIEW: X$KSMLRU - LRU flushes from the shared pool - (7.3 - 8.1) [ID 43600.1]
  12. 建筑业房地产管理系统
  13. 圆点横线圆点 html,目录的点怎么打(目录中小圆点横线上的点要一个个打上去?)...
  14. P2394 yyy loves Chemistry I
  15. Video.js的简单使用介绍
  16. Hadoop集群性能优化一
  17. 使用IDEA 远程调试功能,服务器代码远程调试
  18. 华为鸿蒙harmonyos面相全场,关于华为:HDC2020华为鸿蒙HarmonyOS会带来哪些不一样的体验...
  19. 脚本---perl与python的比较
  20. zbar下条形码和二维码的识别与解码Ⅰ|2021SC@SDUSC

热门文章

  1. java list初始值null_关于list集合存储null的问题
  2. linux svn 面板,Linux下SVN服务器搭建(CentOS+Subversion)
  3. mysql租车管理系统_基于java实现租车管理系统
  4. eclipse debug(程序调试)单步执行 简述
  5. vsftp日志查看_vsftp日志xferlog格式分析(示例代码)
  6. 中如何移动物体在画面中的位置_组合柜摆在客厅中什么位置最旺运?客厅中,财位是如何确定的?...
  7. db2 空值转换函数_Hive常见函数的使用
  8. oracle的al32utf8,oracle字符集修改(AL32UTF8-UTF8)
  9. maven deploy上传私服出错
  10. java 运行 出现选择_Eclipse 运行出现java.lang.NoClassDefFoundError的解决方法