【shell编程基础2】shell组合应用之一:重定向和逻辑
这篇主要讲下
数据的重定向,在shell脚本中有些重要的输出重定向为文件的形式输出来
逻辑方式的多个命令组合,可以很方便的进行一些判断
- 数据流重定向
数据流重定向:大致上的意思就是本该输出到屏幕上的数据,使用一些特殊方式使他输出到其他地方
">" ">>" 数据流输出导向
"<" "<<" 数据流输入导向
首先明白一个概念,标准输入输出和出错输出:
.标准输入(stdin):代码为0,使用"<" "<<" .标准输出(stdout):代码为1,使用">" ">>" .标准错误输出(stderr): 代码为2,使用 "2>" "2>>"
">" 和 ">>"输出导向
$ ls /home > ~/homefile
这是一条很简单的输出重定向命令,就是把ls 产生的输出,输出到文件中。
那么这里就存在一种情况,我重定向的文件存在不存在的问题:
.该文件不存在时,系统为其创建
.若文件存在,则先清空再导入内容,所以原来的内容被覆盖
由上面的两条很容易看出,">"重定向是每次都覆盖写的。
而在">>"中恰好是可以追加的。累加的形式写入文件
上面提到过,错误输出使用的是 "2>"与"2>>"
所以这里可以使用的一个场景是在有些条件下,我们知道某个命令可能出现的错误信息,但是我们不希望他出现在屏幕输出中,可以使用这个重定向将错误信息输出到文件中去
还有一种情况把标准输出和错误输出都输入到同一个地方,使用 "2>&" "2>>&"
"<" 和 "<<"输入重定向
"<" 将某文件作为输入
cat > catfile < ~/.bashrc
"<<" 代表输入结束
cat > catfile << "eof"
这语句代表输入 'eof' 结束输入
这里我们总结下使用重定向的情况:
- 屏幕打印的输出信息很重要,而且我需要将它存下来
- 后台执行的程序,不希望它干扰屏幕正常的输出信息
- 一些系统的例行命令(例如写在/etc/crontab中的文件)的执行结果,希望它可以存下来
- 一些执行命令的可能已知错误信息时,可以直接以"2>/dev/null"将它丢掉
- 错误信息和正确信息需要分别输出时
- 命令执行的判断逻辑
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组合应用之一:重定向和逻辑的更多相关文章
- shell编程基础(二): shell脚本语法之分支语句和循环语句
一.分支语句 1.条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与 ...
- shell编程基础(四): shell脚本语法之函数及调试
一.Shell脚本中的函数 和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表.例如: #! /bin/sh fun(){ echo "Function fun ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- shell编程基础进阶
为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...
随机推荐
- JavaWeb:JSTL
JSTL 说明 什么是JSTL? JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制的标签库的集合,用来解决像遍历map或者集合.条件测 ...
- HTML移动端开发常见的兼容性总结
1.安卓浏览器看背景图片,有些设备会模糊.用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网 ...
- jquery考试纠错笔记.
1. 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div& ...
- 阿里巴巴Java开发手册快速学习
Java作为一门名副其实的工业级语言,语法友好,学习简单,大规模的应用给代码质量的管控带来了困难,特别是团队开发中,开发过程中的规范会直接影响最终项目的稳定性. 善医者“未有形而除之”,提高工程健壮性 ...
- 转:js中cookie的使用详细分析
cookie机制将信息存储于用户硬盘,因此可以作为全局变量,这是它最大的一个优点.它可以用于以下几种场合. (1)保存用户登录状态.例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就 ...
- Struts2学习笔记⑥
在微信读书上在看一本李刚写的Struts 2.X权威指南 (好像叫这个)的书,可以看得出来作者的开发经验还是很充足的,但是觉得他的尺度和顺序没有把握好,他自己说拦截器是数据校验.国际化的基础-完了还把 ...
- 3713: [PA2014]Iloczyn
3713: [PA2014]Iloczyn Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 327 Solved: 181[Submit][Status ...
- Octave Tutorial(《Machine Learning》)之第三课《数据计算》
第三课 Culculating Data 数据计算 矩阵计算 1.简单的四则运算 2.相乘除,乘方运算(元素位运算) ".*"为对应元素的相乘计算 "./"为对 ...
- LBPL--基于Asp.net、 quartz.net 快速开发定时服务的插件化项目
LBPL 这一个基于Asp.net. quartz.net 快速开发定时服务的插件化项目 由于在实际项目开发中需要做定时服务的操作,大体上可以理解为:需要动态化监控定时任务的调度系统. 为了实现快速开 ...
- JavaScript 方法调用模式和函数调用模式
这两天在读<JavaScript语言精粹>关于第4章函数调用的几种模式琢磨了半天. 这里就说一下方法调用模式跟函数调用模式. 方法调用模式: 当一个函数被保存为对象的一个属性时,我们称它为 ...