• 【shell编程基础2】shell组合应用之一:重定向和逻辑


    这篇主要讲下

    数据的重定向,在shell脚本中有些重要的输出重定向为文件的形式输出来

    逻辑方式的多个命令组合,可以很方便的进行一些判断


    • 数据流重定向

    数据流重定向:大致上的意思就是本该输出到屏幕上的数据,使用一些特殊方式使他输出到其他地方

    ">"  ">>"  数据流输出导向

    "<"  "<<"  数据流输入导向

    首先明白一个概念,标准输入输出和出错输出:

    1.标准输入(stdin):代码为0,使用"<" "<<"
    
    2.标准输出(stdout):代码为1,使用">" ">>"
    
    3.标准错误输出(stderr): 代码为2,使用 "2>"  "2>>"

    ">" 和 ">>"输出导向


    $ ls /home > ~/homefile

    这是一条很简单的输出重定向命令,就是把ls 产生的输出,输出到文件中。

    那么这里就存在一种情况,我重定向的文件存在不存在的问题:

    1.该文件不存在时,系统为其创建
    2.若文件存在,则先清空再导入内容,所以原来的内容被覆盖

    由上面的两条很容易看出,">"重定向是每次都覆盖写的。

    而在">>"中恰好是可以追加的。累加的形式写入文件

    上面提到过,错误输出使用的是 "2>"与"2>>"

    所以这里可以使用的一个场景是在有些条件下,我们知道某个命令可能出现的错误信息,但是我们不希望他出现在屏幕输出中,可以使用这个重定向将错误信息输出到文件中去

    还有一种情况把标准输出和错误输出都输入到同一个地方,使用  "2>&" "2>>&"

    "<" 和 "<<"输入重定向


    "<"  将某文件作为输入

    cat > catfile < ~/.bashrc

    "<<" 代表输入结束

    cat > catfile << "eof"
    这语句代表输入 'eof' 结束输入

    这里我们总结下使用重定向的情况:

    1. 屏幕打印的输出信息很重要,而且我需要将它存下来
    2. 后台执行的程序,不希望它干扰屏幕正常的输出信息
    3. 一些系统的例行命令(例如写在/etc/crontab中的文件)的执行结果,希望它可以存下来
    4. 一些执行命令的可能已知错误信息时,可以直接以"2>/dev/null"将它丢掉
    5. 错误信息和正确信息需要分别输出时
    • 命令执行的判断逻辑

    1.顺序执行多个命令: ";"

      只需要将需要执行的命令以 ";"分割开来放在脚本中就行。

    2.&& 与 ||

      首先回忆下命令执行的回传码, "$?" 代表上一个执行命令的回传码

      这里需要用到这个返回值,逻辑的判断根据这个回传码。  这里 "$?"回传码的返回值为0为真,返回值为其他的为假

      

    命令执行情况 说明
    cmd1 && cmd2

    若cmd1执行完毕且正确执行($?=0),则开始执行cmd2

    若cmd1执行完毕且返回错误($?!=0),则不执行cmd2

    cmd1 || cmd2

    若cmd1执行完毕且正确执行($?=0),则不执行cmd2

    若cmd1执行完毕且返回错误($?!=0),则开始执行cmd2

    很有用的一点就是两个逻辑符号组合使用:

    1.判断某个文件是否存在

    $ ls /tmp/abc  && echo "exist" || echo "not exist"

    2.判断文件是否存在,不存在时创建

    $ ls /tmp/abc || mkdir /tmp/abc && touch /tmp/abc/file

    剩下的就看你的了。

     

  • 相关阅读:
    Codeforces Round #390 (Div. 2) D
    Codeforces Round #390 (Div. 2) B
    Codeforces Round #390 (Div. 2) A
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) B
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A
    高通平台MSM8916LCM模块移植(一)-bootloader部分
    新城控股:千亿目标下的炼数成金之道
    UE4实现描边效果
  • 原文地址:https://www.cnblogs.com/panhao/p/5317684.html
Copyright © 2020-2023  润新知