Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
1. 输出重定向
最基本的重定向是将命令的输出发送到一个文件中。在bash shell中用大于号(>) ,格式如下:command > inputfile。例如:将date命令的输出内容,保存到指定的输出文件中。

如果文件已存在,重定向操作符会用新的文件数据覆盖已有文件。这种情况下可以用双大于号(>>) 来追加数据。如下图所示:

2. 输入重定向
输入重定向和输出重定向正好相反。输入重定向是将文件的内容重定向到命令,而非将命令的输出重定向到文件。 输入重定向符号是小于号(<),格式如下:Command < inputfile。下面是test1文件和wc命令一起使用输入重定向的例子。 wc 命令可以对文件内容进行计数包括文本的行数、文本的词数、文本的字节数。

另外一种输入重定向的方法,称内联输入重定向(符号是 <<)。这种方法无需使用文件进行重定向,只需要在命令行中指定用于输入重定向的数据就可以了。计数包括文本的行数、文本的词数、文本的字节数。

3. 管道
管道符号是单个竖线( | ) ,管道被放在命令之间,将一个命令的输出重定向到另一个命令中。格式: command1 | command2 。Linux系统会同时运行这两个命令,在系统内部将它们连接起来。在第一个文件产生输出的同时,输出会被立即送给第二个命令,数据不会用到任何中间文件或缓冲区。例如查找yum安装的所有包,并使用管道立即送给第二个命令 grep 来过滤查询字符中含有mysql的。

下面是使用了二个管道, 排序,分页查看。并将结合重定向来将输出保存到yum.list文件中,下图是通过cat yum.list来查看文件内容。
[hsr@xuegod64 ~]$ yum list | sort | more
[hsr@xuegod64 ~]$ yum list | sort > yum.list

4. 数学运算命令
在Bourne shell 中使用expr命令来进行数字运算。在bash shell 中也兼容,但它提供了更简单的方法来执行数学表达式, 在bash中, 将一个数学变量结果赋给某个变量时,可以用美元符和方括号( $[operation] ) 将数学表达式围起来(注意运算只支持整数)。

同样也适合于shell脚本中。

5. 浮点解决方案
有几种方法克服bash中数学运算的整数限制,最常见的方案是用内建的bash计算器叫作bc。
5.1 bc的基本用法
bash计算器实际上是一种编程语言,它允许在命令行输入浮点表达式,然后解释并计算该表达式,返回结果。Bash 计算器能够识别: 数字,变量,注释,表达式,编程语句(if -then)。
用法是在命令行输入bc,接着输入要进行运算的数字表达式,按回车出结果,如下图所示:

对于保留小数位,使用scale指定要保留的小数位,下面先指定保留4位小数。

下面使用 bc –q选项不显示bash计算器的欢迎信息。使用变量来看看,如下图:

5.2 在脚本中使用bc
使用之前学过的命令替换,可以用命令替换运行bc命令,并将输出赋给一个变量。格式如下: variable=$(echo “options; expression” | bc) options是允许你设置变量,如果不止一个,用分号分开。 expression定义了通过bc执行的数学表达式。
下面是将scale变量设置成四位小数,并在expression部份指定了特定的运算。

下面是在脚本中使用变量来运算浮点数

下面另一种方法是通过内联重定向,格式是 :
variable=$(bc << EOF
Options
Statements
Expressions
EOF)

6. 退出脚本
6.1 查看退出状态码
shell中运行的每个命令都有退出状态码(exit status)告诉shell它已经运行完毕。退出状态码是一个0~255的整数值。在命令结束时由命令传给shell,可以捕获这个值并在脚本中使用.
Linux提供了一个专门的变量$? 来保存上个已执行命令退出状态码。这个类似于一种开发中用断点诊断方式。 如果命令成功结束退出状态码是0,如果命令有错误,退出状态就是一个正整数。如下图所示:

下面是linux退出状态码列表
|
状态码 |
描述 |
|
0 |
命令成功结束 |
|
1 |
一般性未知错误 |
|
2 |
不适合的shell命令 |
|
126 |
命令不可执行 |
|
127 |
没有找到命令 |
|
130 |
通过ctrl + c 终止的命令 |
|
255 |
正常范围之外的退出状态码 |
需要注意的是退出状态码126 出现,有可能是用户没有执行命令的正确权限. 另一个退出状态码 1的出现,有可能是命令的参数不对。
6.2 exit
默认情况下,shell脚本会以脚本中最后一个命令的退出状态码退出。使用exit 命令可以改变这种默认行为,返回自己的的退出状态码,exit 命令允许脚本结束时指定一个退出状态码,但最大状态码只能是255。
下面在脚本最后自定义退出状态码10, 执行脚本后,使用echo $? 输出了状态码10 。

Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)的更多相关文章
- Linux学习之Shell编程基础
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
- Linux与Unix shell编程指南(完整高清版).pdf
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
- Linux之19——Shell编程基础详解
第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...
- Linux下的Shell编程
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- Linux 与 unix shell编程指南——学习笔记
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
- linux下的Shell编程(3)shell里的流程控制
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
- [No000014A]Linux简介与shell编程
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
- linux操作系统5 shell编程
知识内容: 1.shell编程预备知识 2.shell变量 3.表达式与运算符 4.分支循环语句 5.函数 一.shell编程预备知识 1.什么是shell编程 shell是与linux交互的基本工具 ...
- linux学习总结----shell编程
## 环境变量 ## 全局变量 ``` 常见的全局环境变量 PATH 指令的搜索路径 HOME 用户的家目录 LOGNAME 登录名 SHELL 脚本的类型 使用全局环境变量 echo $PATH 自 ...
随机推荐
- 能量模型与softmax和RBM以及正态分布的关联
上面一篇文章中探讨了玻尔兹曼分布的起源: 在不清楚目标的真实分布,也不知道样本分布的时候,假设任意输入与输出组合都是同样可能发生的,这样是最公平,最无偏的先验. 因为无法直接统计出给定任意一种输入x, ...
- sourceInsight4 完美破解
sourceInsight4 完美破解 参考路径: https://blog.csdn.net/zxy020/article/details/75047670 首先确保你在官网下载了原版4.0并安装好 ...
- 关于String类学习的一些笔记(本文参考来自程序员考拉的文章)
String 类继承自 Object 超类,实现的接口有:Serializable.CharSequence.Comparable<String> 接口,具体如下图: 一.常用的Strin ...
- Apache Flink 简单安装
流计算这两年很火了,可能对数据的实时性要求高.现在用的hadoop框架,对流计算的支持,主要还是微批(spark),也不支持“Exactly Once”语义(可以使用外接的数据库解决),公司项目可能会 ...
- (26)A delightful way to teach kids about computers
https://www.ted.com/talks/linda_liukas_a_delightful_way_to_teach_kids_about_computers/transcript00:1 ...
- idea使用自动生成变量的时候总是默认final,每次都会跳出来declare final的选项,并且默认是勾选的,很难受
看下截图: 我这边首先要保证:settings----->Editor------>Code Style-------->java下的这两个选项不被勾选; 然后在生成变量的时候,再次 ...
- 09-JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- Linux shell脚本学习(一)
一.shell脚本简介 shell脚本是用shell脚本语法将shell命令组织起来形成的文件形式.Shell脚本与Windows/Dos 下的批处理相似,主要为了将大量命令通过一个纯文本文件一次执行 ...
- Flask框架(二)
request @app.route('/requests/', method=['GET', 'POST']) def req(): print(request.data) #请求方式 print( ...
- Android-引导用户指纹录入
根据不同的手机,跳转到指纹录入界面,如果没有检测到手机的品牌,就提醒用户手动去指纹录入: 首先描述手机信息检测对象,PhoneInfoCheck.java: package com.esandinfo ...