shell学习笔记之九(重定向)

重定向
    概念:
        将默认的输入输出改成其他的输入输出
    文件标识符
        linux使用0-9指明特定进程相关的数据流,系统在启动一个进程的时候会为该进程打开三个文件:标准输入(stdin),标准输出(stdout),标准错误输出,分别使用文件标识符0,1,2来标识,如果要为进程打开其他的输入输出,则需要从整数3开始标识。默认情况下,标准输入为键盘,标准输出和错误输出为显示器
    I/O重定向
        1、标准输出覆盖重定向(>)
            ls -l > test.txt
            注意:如果指定的文件不存在,则命令会先创建文件
            上述命令相当于:ls -l 1>test.txt
            ls -l /usr/noExist 2> ls_noExist_err.txt
            错误重定向输出
            如果命令的输出既有标准输出,又有错误标准输出,则可以分别指定不同标识符的内容
            COMMAND 1> stdout.txt 2> stderr.txt
        2、标准输出追加重定向(>>)
            和>的用法一致,只是这个是追加,不会清空原文件
        3、标识输出重定向(>&)
            标准输出重定向的作用是将一个标识的输出重定向到另一个标识的输入。
            例:将标准输出和标准错误输出同时重定向到一个文件
                COMMAND > test.txt 2>&1
                如果不关心错误输出
                    COMMAND > test.txt 2> /dev/null #/dev/null是一个特殊设备,像一个黑洞
        4、标准输入重定向 <
        5、管道(|)
        6、exec
            exec是shell的内建命令,
        7、Here Document
            用于在命令中按行输入文本,格式为<<delimiter,其中delimiter是一个用于标注的分割符,该分割符后所有的输入都被当作是输入的文本,直到出现下一个分隔符。
            这个的功能的出现主要是因为Ctrl+D输入完成的信号在交互环境下是可以的,但是在脚本中却无法使用。
            例:
                #cat here.txt
                line1
                line2
                line3
                line4
                #现在想要在here.txt的第三行插入一个新行
                #!/bin/bash
                ed here.txt <<END
                3
                d
                i
                this is new line3
                .
                wq
                END
                #cat here.txt
                line1
                line2
                this is new line3
                line4
                也就是说,我们把要在终端输入的命令全部写道一个文件里,这个文件相当于模拟我们的键盘输入
                #对一串输入字符排序
                #!/bin/bash
                sort <<END
                sdt
                t
                dsaj
                dsg
                fdg
                we
                gh
                avf
                END
                这样就可以在任何时候任何时间对这些字符串进行排序了。

空格:
    1、test 测试比较时,操作符两侧要有空格
    2、if [] ,if 和 [] 之间要有空格
    3、[ expression ]  expression两侧要有空格
    4、算数运算和赋值没有空格
    5、while与之后的expression有空格    如:while expression
时间: 2024-10-07 00:26:03

shell学习笔记之九(重定向)的相关文章

简单的玩玩etimer &lt;contiki学习笔记之九&gt;

好吧,我承认etimer有点小复杂,主要是它似乎和contiki的process搅在一起,到处都在call_process.那就先搜搜contiki下的etimer的example看看,然后再试着写一个demo玩玩. 在写demo之前,先说说自己是怎么找到etimer 的example的文件的. 在core/sys/etimer.h 文件中,在描述etimer的数据结构的时候,作者显示的指出,如果要使用etimer,就必须先使用 etimer_set()这个函数进行一些工作,如图: 是的,数据结

MySQL学习笔记之九 字符串模式匹配

我们在使用查询的时候,经常会碰到模糊条件查询,而模糊查询就涉及到了字符串模式匹配. 在这里,主要讲两个:标准的SQL模式匹配.扩展正则表达式模式匹配.     一.标准的SQL模式匹配 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在MySQL中,SQL的模式缺省是忽略大小写的.下面显示一些例子.注意在你 使用SQL模式时,你不能使用=或!=:而使用LIKE或NOT LIKE比较操作符. 为了找出包含正好5个字符的名字,

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

简单的玩玩etimer &lt;contiki学习笔记之九 补充&gt;

这幅图片是对前面  <<contiki学习笔记之九>>  的一个补充说明. 简单的玩玩etimer <contiki学习笔记之九> 或许,自己正在掀开contiki process最后的一层面纱: 或许,还有一段路要走: 或许,已经掀开... --------------- 一切,都只是process:只有有了process,才会轮到etimer_process  发言,除非,抛却一切机制,裸机实现etimer... process,是什么? 一个链表,还是单向的,仅此

angular学习笔记(十九)

本篇主要介绍angular使用指令修改DOM: 使用angular指令可以自己扩展html语法,还可以做很多自定义的事情.在后面会专门讲解这一块的知识,这一篇只是起到了解入门的作用. 与控制器,过滤器,服务,一样,可以通过模块实例的directive的方法来创建指令: var someModule = angular.module('SomeModule',[]); someModule.directive('directiveName',function(){ return { link: f

VSTO学习笔记(九)浅谈Excel内容比较

原文:VSTO学习笔记(九)浅谈Excel内容比较 说起文件内容比较,或许我们首先想到的是UltraCompare这类专业比较的软件,其功能非常强大,能够对基于文本的文件内容作出快速.准确的比较,有详细的差异报告,非常便于分析.其实,各种版本控制软件中也包含有或多或少的比较功能,如TFS.CVS.SVN等.但是如果待比较的文件不是基于文本类型的,那就无能为力了.今天我就来谈一谈Excel的比较方法及其特点,也和大家共同探讨一下,如果你有更好的方法,欢迎分享. 一.Excel的文件架构 Excel

SHELL学习笔记----IF条件判断,判断条件

SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here       elif list then           do another thing here       else          do something else here fi  EX1: #!/bin/bash if [ `uname -m` == "x86_64" ]

汇编入门学习笔记 (九)—— call和ret

疯狂的暑假学习之  汇编入门学习笔记 (九)--  call和ret 參考: <汇编语言> 王爽 第10章 call和ret都是转移指令. 1. ret和retf ret指令:用栈中的数据,改动IP内容,从而实现近转移 相当于: pop ip retf指令:用栈中的数据.改动CS和IP,从而实现远转移 相当于: pop ip pop cs 样例:ret assume cs:code,ss:stack stack segment db 16 dup(1) stack ends code segm

Linux Shell 学习笔记

2.return与exit区别 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层调用. exit(0)表示正常退出执行程序,如果加其它的数值:1,2,....可以表示由于不同的错误原因而退出 . main函数中exit(0)等价于return 0. 1. Linux下一条命令或一个进程执行完成会返回一个一个状态码. 0 === 成功执行 非0 === 执行过程