【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

剩下的就看你的了。

 

原文地址:https://www.cnblogs.com/panhao/p/5317684.html