这篇主要讲下

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

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


  • 数据流重定向

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

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

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

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

.标准输入(stdin):代码为0,使用"<" "<<"

.标准输出(stdout):代码为1,使用">" ">>"

.标准错误输出(stderr): 代码为2,使用 "2>"  "2>>"

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


$ ls /home > ~/homefile

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

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

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

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

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

上面提到过,错误输出使用的是 "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

剩下的就看你的了。

 

【shell编程基础2】shell组合应用之一:重定向和逻辑的更多相关文章

  1. shell编程基础(二): shell脚本语法之分支语句和循环语句

    一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...

  2. shell编程基础(四): shell脚本语法之函数及调试

    一.Shell脚本中的函数 和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表.例如: #! /bin/sh fun(){ echo "Function fun ...

  3. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

  4. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

  5. 6-2 shell编程基础

    shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...

  6. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  7. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  8. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  9. Linux学习之二十一-shell编程基础

    Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...

  10. shell编程基础进阶

    为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...

随机推荐

  1. 如何让celery接受定制的参数

    背景介绍 最近的一个项目使用到celery结算订单,使用celery的确很方便.但是复杂的内部框架导致了需要传人大量的参数例如数据库配置文件等.下面先来看看我仿照官网写的代码.所有代码都放到githu ...

  2. how to use Prolog in C#? SWI-Prolog

    上个月突然看到Prolog这门语言,它特殊的语法吸引了我,但是经过我一段时间的学习,发现它也不像网络上传说的那样神奇,不过我依然对它很感兴趣,有前辈说Prolog本身并不强大,但是用来作为一门辅助语言 ...

  3. JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...

  4. 1230: [Usaco2008 Nov]lites 开关灯

    1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1162  Solved: 589[Sub ...

  5. 1819: [JSOI]Word Query电子字典

    1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 729  Solved: 238[Submit][S ...

  6. java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS

    概述 java-信息安全(一)-BASE64,MD5,SHA,HMAC java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4 java-信息安全(四)-数据 ...

  7. Apache无法启动原因

    Apache不能启动解决办法 作者的话:遇到这个问题的时候,从网上找了很多资料,结果都是让我这个新手摸不着头绪 还好,在我长时间的查找下,还是找到了一篇文章,解决了我的烦恼,下面是我对这个文章的一些对 ...

  8. git中常见的几个命令

    git中常见的几个命令 本地仓库 三个区域 工作目录 暂存区 本地仓库 文件的四个状态 未跟踪 untracked 已暂存 staged 已提交commited 已修改 modified 基本命令 g ...

  9. NOI全国赛(2001)--食物链

    今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...

  10. Android 7.0 调取系统相机崩溃解决android.os.FileUriExposedException

    一.写在前面 最近由于廖子尧忙于自己公司的事情和OkGo(一款专注于让网络请求更简单的网络框架) ,故让LZ 接替维护ImagePicker(一款支持单.多选.旋转和裁剪的图片选择器),也是处理了诸多 ...