俺用的是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
下面是退出码