zoukankan      html  css  js  c++  java
  • SHELL脚本的基础知识5——显示数据

    一、输入和输出

    1、标准文件描述符

    每个进程中最多可以有9个打开文件的描述符:0——stdin,1——stdout,2——stderr。

    (1)STDIN

         对于终端,stdin就是键盘。

         使用输入重定向符号(<)时,就将使用重定向引用的文件替换标准的输入文件描述符。

    (2)STDOUT

         对于终端,stdout就是显示器。

         使用输出重定向符号(>)时,就将使用重定向引用的文件替换标准的输出文件描述符。

         还可以使用>>,向文件追加数据。

    (3)STDERR

         shell将错误提示信息与正常输出信息分开处理。默认情况下,stderr与stdout都是输出到显示器。

    2、重定向错误

        有几种方法可以进行重定向数据

    (1)仅重定向错误: 2> file   (2必须位于>的正前方,2与>之间不能有空格),此时标准输出不受影响,仍然输出到显示器

    (2)重定向错误和数据:

           同时使用两个重定向输出到不同文件,2> file1, 1> file2

           输出到同一个文件:&> file

    二、在脚本中重定向输出

        使用脚本重定向输出的方法有以下两种

    1、临时重定向

        重定向到某个文件描述符,必须在编号前加&号。ex:  >&2 (>& 间无空格)

        然后当这个文件描述符对应的文件被重定向后,脚本对应的重定向输出内容也同样被重定向。

    2、永久重定向

        可以使用exec命令通知shell在脚本执行期重定向特定的文件描述符

        ex: exec 1>testout

    重定向stdout和stderr后,就无法轻松再重定向回原来文字,需要使用技巧(见下方)

    三、在脚本中重定向输入

        同样使用exec即可,ex: exec 0< file

        对于读取文本数据并使用脚本处理,这是一个好方法。

    四、创建自己的重定向

        除了0,1,2外,其他3-8都可以用于创建自己的重定向。

    1、创建输出文件描述符

        同样是先使用 exec 3>test13out,再将某一行     ……… >&3

    2、重定向文件描述符

       可以将stdout等的原位置重定向到备选文件描述符,然后将该文件描述符重定向回stdout。

       ex:  exec 3>&1

             exec 1>file

             ……

             exec 1>&3

       这是一种临时重定向脚本文件输出然后恢复回普通设置的常用方法

    3、创建输入文件描述符

        使用上方同样的方法,可将stdin先保存,再定向,再恢复

    ex:   exec 6<&0

           exec 0< testfile

           …………

           exec 0<&6

    4、创建读取/写入文件描述符

         可以使用同一个文件描述符从一个文件读取数据,同时向这个文件写入数据: exec 3<> testfile

         内部将维护一个文件指针,指示内部的位置,读取和输入都将发生在指针上次所指的位置

    5、关闭文件描述符

        使用&-进行关闭文件描述符,ex : exec 3>&- (之后就不可以再使用3了)

        如果再开同一文件,将覆盖之前数据

     

    五、列出开放文件描述符

        使用lsof命令可以列出整个系统上开放的文件描述符。

        可以使用$$确定当前PID,ex: lsof -a -p $$ -d 0,1,2

       

    六、禁止命令输出

      将stderr重定向到空文件(/dev/null),则输出的任何数据都不会保存,即全部丢失。

      使用 cat /dev/null > testfile 就可以快速将testfile中所有数据全部抹除

     

    七、使用临时文件

       /tmp目录专门用于保存临时文件,每次开机时,/tmp下的文件都将自动删除。

       可以使用mktemp命令,在/tmp下创建一个唯一的临时文件

    1、创建本地临时文件

       mktemp 文件名.xxxxxx 就可以在本地目录创建一个唯一的文件

       在脚本中使用mktemp命令,需要使用一个变量保存该文件名。

    2、在/temp中创建临时文件

       使用mktemp -t就可以在/temp下创建临时文件,返回的是完整路径名

    3、创建临时目录

       使用mktemp -d就可以在当前目录下创建临时目录

     

    八、记录消息

       同时将消息发送到监视器和文件,就可以使用tee命令。

       ex: tee filename   将stdin的数据同时发送到stdout,和指定的文件filename

       可以与管道命令配置使用重定向任何命令的输出:ex: date | tee testfile  

       默认情况下,每次使用tee都将覆盖输出文件,使用-a就可以向文件添加数据

  • 相关阅读:
    nginx实现请求的负载均衡 + keepalived实现nginx的高可用
    nginx的location配置详解
    nginx负载均衡算法
    nginx实现集群高可用
    Nginx:承受3万并发连接数,胜过Apache 10倍
    编程高手与调试高手
    Android 中调试手段 打印函数调用栈信息
    android 中打 Log 的一些技巧
    Java程序员应该知道的10个调试技巧
    Camera中对焦模式总结
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1750095.html
Copyright © 2011-2022 走看看