1、Bash的标准输入输出

我们前边一直在说,在Linux系统下,一切皆是文件,键盘和显示器等硬件都是文件,如下图:

从上图中可以看出,键盘的设备文件名为/dev/stdin,显示器标准正确输入的设备文件名为/dev/stdout,显示器标准错误输入的设备文件名为/dev/stderr

这些设备文件名非常不好记忆,Shell允许我们用文件描述符来描述对应的设备,也就是用0、1、2,分别对应键盘、正确显示器,错误显示器。

2、输出重定向

什么叫输出重定向?

命令的输出,是输出给标准输出的,也就是输出到显示器上。而输出重定向就是命令的输出,不输出给标准输出,而是把输出的内容,输出到文件中。

(1)标准输出重定向

  • 命令 > 文件:以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。
  • 命令 >> 文件:以追加的方式,把命令的正确输出,输出到指定的文件或设备当中。

示例如下:

# 覆盖的方式
[root@localhost ~]# pwd > abc
[root@localhost ~]# cat abc
/root # 追加的方式
[root@localhost ~]# pwd >> abc
[root@localhost ~]# cat abc
/root
/root

只要该命令有结果,都能够输进行输出重定向。

(2)标准错误输出重定向

如果执行的命令出现报错,用上边的方式是不能够进行输出内容重定向的,错误信息会直接输出到标准错误输出,如下:

[root@localhost ~]# lsdgagsa >> abc
-bash: lsdgagsa: command not found
  • 错误命令 2>文件:以覆盖的方式,把命令的错误输出,输出到指定的文件或设备当中。
  • 错误命令 2>>文件:以追加的方式,把命令的错误输出,输出到指定的文件或设备当中。

这个2是文件描述符,表示标准错误输出,看上表。

示例如下:

[root@localhost ~]# lsdgagsa 2>> abc
[root@localhost ~]# cat abc
/root
/root
-bash: lsdgagsa: command not found

这里需要注意的是,上边的标准正确输出和标准错误输出的重定向有一些小问题,就是我要事先知道这条命令是否报错,才能选择是使用标准正确输出还是使用标准错误输出。

这样十分不合理,我明知道命令会报错,那我直接写对不就完了。所以我们在工作中写脚本的时候,常用的输出重定向的方式是下面的方式。

(3)正确输出和错误输出同时保存

方式一

  • 命令 > 文件 2>&1:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
  • 命令 >> 文件 2>&1:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)

示例如下:

# 把ls命令的查询结果覆盖存储到abc文件中
[root@localhost ~]# ls > abc 2>&1
[root@localhost ~]# cat abc
anaconda-ks.cfg
install.log
install.log.syslog # 把错误信息追加存储到abc文件中
[root@localhost ~]# lsadfgag >> abc 2>&1
[root@localhost ~]# cat abc
anaconda-ks.cfg
install.log
install.log.syslog
-bash: lsadfgag: command not found

命令 >> 文件 2>&1的意思是,把命令的正确输出,输出到文件中,然后把命令的错误输出,输出到正确输出的文件中。

方式二

  • 命令 &>文件:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
  • 命令 &>>文件:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)

示例如下:

# 把pwd命令的结果覆盖存储到abc文件中
[root@localhost ~]# pwd &> abc
[root@localhost ~]# cat abc
/root # 把错误信息追加存储到abc文件中
[root@localhost ~]# lsadfgag &>> abc
[root@localhost ~]# cat abc
/root
-bash: lsadfgag: command not found

方式三

命令>>文件1 2>>文件2:把正确的输出追加到文件1中,把错误的输出追加到文件2中。(常用)

统一保存和分开保存看你习惯。

注意,在正确输出的时候>或者>>两边是可以有空格的,如果是错误输出的时候,2和>或者>>之间是不能有空格的。

如下,提示语法错误。

[root@localhost ~]# lsgdagasasd >> abc 2 > &1
-bash: syntax error near unexpected token `&’

3、输入重定向

输入重定向就是<。意思是命令的输入是由标准输入输入的,也就是由键盘输入的。输入重定向就是改变输入方向,不在由键盘作为输入,而拿文件作为命令的输入。(输入重定向比较少见)

我们只在之前给源码包打补丁的patch命令(文章https://www.cnblogs.com/liuyuelinfighting/p/15574188.html),和RPM源码包文件提取中的cpio命令用到过。

<<号用的就更少了,基本没有实际的应用。

uio就相当于一个分界符,在两个uio中间的内容,输入给wc命令,进行统计。

『忘了再学』Shell基础 — 6、Bash基本功能(输入输出重定向)的更多相关文章

  1. 『忘了再学』Shell基础 — 2、Shell的作用与分类

    目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...

  2. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

  3. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  4. 『忘了再学』Shell基础 — 24、Shell正则表达式的使用

    目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...

  5. 『忘了再学』Shell基础 — 25、扩展正则表达式

    目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...

  6. 『忘了再学』Shell基础 — 30、sed命令的使用

    目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...

  7. 『忘了再学』Shell基础 — 1、Shell的介绍

    目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...

  8. 『忘了再学』Shell基础 — 4、Bash基本功能(history命令)

    目录 1.history历史命令 2.设置命令历史记录的条数 3.清空历史命令 4.历史命令的调用 5.命令与文件的补全 在Linux系统中默认的Shell就是Bourne-AgainShell(简称 ...

  9. 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)

    目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...

随机推荐

  1. Keepalived非抢占模式配置

    一.前言 HA的实际运行过程中,当主机发生异常,且后期恢复正常后,存在抢占或非抢占两种情况. 结合实际需求,可能有很多用户需要非抢占的HA工作模式.keepalived能够很好的支持这一需求. 二.k ...

  2. 『无为则无心』Python日志 — 64、Python日志模块logging介绍

    目录 1.日志的作用 2.为什么需要写日志 3.Python中的日志处理 (1)logging模块介绍 (2)logging模块的四大组件 (3)logging日志级别 1.日志的作用 从事与软件相关 ...

  3. Python 小数据池和代码块缓存机制

    前言 本文除"总结"外,其余均为认识过程:3.7.5: 总结: 如果在同一代码块下,则采用同一代码块下的缓存机制: 如果是不同代码块,则采用小数据池的驻留机制: 需要注意的是,交互 ...

  4. c# 窗体相关操作(最大化/最小化/关闭/标题栏)

    /// <summary> /// 窗体跟随鼠标移动的标记 /// </summary> private bool normalmoving = false; /// < ...

  5. 如何在矩池云上运行FinRL-Libray股票交易策略框架

    FinRL-Libray 项目:https://github.com/AI4Finance-LLC/FinRL-Library 选择FinRL镜像 在矩池云-主机市场选择合适的机器,并选择FinRL- ...

  6. 如何从头到脚彻底解决一个MySQL Bug

    摘要:为了保障华为云GaussDB产品的可靠性,每一款产品发布前都要通过多轮严苛的测试用例. 说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL. 华为云数据库新版本在发布之前,会 ...

  7. 清华大学ucore操作系统课笔记

    操作系统 清华大学ucore操作系统课笔记 全文思维导图 1. 操作系统概述 1.1 什么是操作系统? 操作系统的定义 没有公认的精确定义 一个控制程序 一个系统软件 控制程序执行过程,防止错误和计算 ...

  8. tp 5 实现邮件发送

    参考博客: https://www.cnblogs.com/ccdr/p/14751548.htmlhttps://www.cnblogs.com/ccdr/p/14751548.html 1:qq邮 ...

  9. 金蝶 K3 WISE 服务器必须登陆到桌面以后用户才能正常使用解决!

    我们单位K3的系统,由当地的服务商安装完以后就出现各种蛋疼的问题.做技术支持的小伙他总是会给一个小工具来解决,问他是什么原因要么说我的网络有问题,要么说我们的服务器有问题. K3所有客户端无法登陆一键 ...

  10. 【故障公告】没有龙卷风,k8s集群翻船3次,投用双集群恢复

    今天没有龙卷风(异常的高并发请求),故障却依然出现,问题非常奇怪. 某种异常情况会造成短时间内, k8s 集群中大量 pod (超过60%)因健康检查失败而处于 CrashLoopBackOff 状态 ...