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. 360携手HarmonyOS打造独特的“天气大师”

    做创新,首先要找到有增长趋势的流量红利,对我们来说,HarmonyOS就是绝佳的合作伙伴. --申悦 360手机助手创研产品部负责人 一.我们是谁? 我们来自360,是一支致力于孵化新业务的内部创新小 ...

  2. Hook(钩子技术)基本知识讲解,原理

    一.什么是HOOK(钩子)  API Windows消息传递机制,当在应用程序进行相关操作,例如点击鼠标.按下键盘,操作窗口等,操作系统能够感知这一事件,接着把此消息放到系统消息队列,然后到应用程序的 ...

  3. 【C# 调试】.net中的 .pdb文件是什么,有什么用

    mscn:在 Visual Studio 调试器(C#)中指定符号 (.pdb) 和源文件 PDB全称Program Database,程序数据库 ( .pdb) 文件(也称为符号文件)将项目源代码中 ...

  4. C#中default 、base 、this关键字用法简介

     C#中default关键字用法简介 default 关键字可在switch语句或泛型代码中使用.switch语句:指定默认标签.泛型代码:指定类型参数的默认值.对于引用类型为空,对于值类型为零swi ...

  5. 二分查找法&大O表示法

    二分查找法的输入是一个有序的元素列表,如果要查找的元素包含在列表中,二分查找返回其位置,否则返回null Python代码(来源于<算法图解>一书): def binary_search( ...

  6. ubuntu 18.04安装hadoop 2.9.2

    先试用命令su,进入root用户权限 下载jdk及hadoop 分别解压,/java,/hadoop tar xvf xxx.tar(在所在目录下进行,或者) tar xvf /x/x/xxx.tar ...

  7. Chapter09 项目

    Chapter09 项目 房屋出租系统(面向对象中级) 9.1 房屋出租系统-需求 9.1.1项目需求说明 实现基于文本界面的<房屋出租软件>. 能够实现对房屋信息的添加.修改和删除(用数 ...

  8. laravel 和 tp的区别

    https://www.cnblogs.com/xiaoyantongxue/p/15442844.html laravel    数据库储存的时间字段 created_at  updated_at ...

  9. laravel 7 登录

    1:路由,展示登录表单 Route::group(['prefix'=>'day','namespace'=>'day18'],function (){ // 登录 Route::get( ...

  10. tp 5 三级联动查询(自写)

    思路: 1.定义路由 2.查询顶级分类(pid=0)发送至制图 3.循环展示 4.给顶级分类下拉框绑定内容改变事件(JS:onchange.JQ:change) 5.获取到选中的option的valu ...