linux 管道,数学运算expr和bc(内置计算器)运用,与退出脚本的状态码

俺用的是Red Hat(红帽的Linux)

1.管道

有时需要将一个命令的输出作为另一个命令的输入。这可以用重定向来实现,只是现在觉得蛮麻烦。(看不懂的看下面这一句话是蛮绕口)

$ rpm  -qa > 1.txt

这里rpm是red hat 的安装包用>符号来代表把rpm所有内容输出到1.txt中去如果是>>那么代表不会覆盖原有的内容而只是追加

$  rpm -qa >1.txt | sort

sort是排序的意思,这句话的意思将rpm的内容输出到1.txt中并且进行排序(sort)
除非你的眼神特别好.根本来不及看清楚命令的输出。操作是实时运行的,
只要 rpm 命令一输出数据, sort 命令就会立即对其进行排序。等到 rpm 命令输出完数据, sort命令就已经将数据排好序并显示了在显示器上,这样我们就不好看了。
所以就有了下面的升级用less或more来显示 ,less:是用来分页的显示,more:是有一个百分比的显示每一次回车显示一条数据

$ rpm -qa | sort | more

将会输出下面的内容在这里插入图片描述
下面的是用less显示在这里插入图片描述
同时想别致一点有很多种写法

$ rpm -qa | sort > rpm.list
$ rpm -qa | sort | more

第一个是把内容先排序后输出
第二个是把内容排序并进行more百分比显示

2.数学运算先是expr后是bc

任何编程语言都很重要的特性是操作数字的能力。对shell脚本来说,这
个处理过程会比较麻烦。在shell有两种途径来进行数学运算。

最开始,Bourne shell提供了一个特别的命令用来处理数学表达式。 expr 命令允许在命令行
上处理数学表达式,但是特别笨拙。

$ expr 1 + 5
6  //这是输出的结果
$ expr 5 * 2
expr: syntax error //这也是输出的结果但*在其他地方有用这里shell识别不了它,所以我们
//要用到转义符来告诉shell在这里*是乘号的意思
$ expr 5 \* 2
10

有人想我不想用转义符怎么办,提供了一种更简单
的方法来执行数学表达式。在bash中,在将一个数学运算结果赋给某个变量时,可以用美元符和方括号( $[ operation ] )将数学表达式围起来。

$ var1=$[1 + 5]
$ echo $var1
6
$ var2=$[$var1 * 2]
$ echo $var2
12

用方括号执行shell数学运算比用 expr 命令方便很多。这种技术也适用于shell脚本。

$ cat test7
#!/bin/bash
var1=100
var2=50
var3=45
var4=$[$var1 * ($var2 - $var3)]
echo The final result is $var4

运行这个脚本会得到如下输出。

$ chmod u+x test7
$ ./test7
The final result is 500

同样,注意在使用方括号来计算公式时,不用担心shell会误解乘号或其他符号。
但是用这个只能取整数值
浮点解决方案
有几种解决方案能够克服bash中数学运算的整数限制。最常见的方案是用内建的bash计算器,
叫作 bc 。

bash计算器实际上是一种编程语言,它允许在命令行中输入浮点表达式,然后解释并计算该
表达式,最后返回结果。bash计算器能够识别:
 数字(整数和浮点数)
 变量(简单变量和数组)
 注释(以#或C语言中的 /* */ 开始的行)
 表达式
 编程语句(例如 if-then 语句)
 函数
可以在shell提示符下通过 bc 命令访问bash计算器:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type 'warranty'.
//上面的是bc的一些开发者信息啥的不会用到我们只会用到下面的
12 * 5.4
64.8

除了普通数字,bash计算器还能支持变量。

$ bc -q
var1=10
var1 * 4
40
var2 = var1 / 5
print var2
2
quit

同样也可以在脚本中用到bc

$ cat test11
#!/bin/bash
var1=20
var2=3.14159
var3=$(echo "scale=4; $var1 * $var1" | bc)
var4=$(echo "scale=4; $var3 * $var2" | bc)
echo The final result is $var4

退出脚本

Linux提供了一个专门的变量 $? 来保存上个已执行命令的退出状态码。对于需要进行检查的
命令,必须在其运行完毕后立刻查看或使用 $? 变量。它的值会变成由shell所执行的最后一条命令
的退出状态码。
$ date
Sat Jan 15 10:01:30 EDT 2014
$ echo $?
0
$
按照惯例,一个成功结束的命令的退出状态码是 0 如果一个命令结束时有错误,退出状态
码就是一个正数值。

$ asdfg
-bash: asdfg: command not found
$ echo $?
127

下面是退出码
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值