基础命令 ·

Linux Shell逻辑运算符和表达式详解

Shell 基本上是一个命令解释器,类似于 DOS 下的 command。它接收用户命令(如 ls 等),然后调用相应的应用程序。较为通用的 Shell 有标准的Bourne shell (sh)和C shell (csh)。
很多时候在写 Shell 脚本的时候都容易遗忘部分逻辑运算符和表达式的写法,因此摘录如下,留待不时之需查询使用。
Shell 逻辑运算符涉及以下几种类型,只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。

一、逻辑判断
1、关于文件与目录的逻辑判断
-f         常用。判断『文件』是否为普通文件,比如: if [ -f filename ]
-d         常用。判断『目录』是否存在
-b         判断是否为一个『 block 文件』
-c         判断是否为一个『 character 文件』
-S         判断是否为一个『 socket 标签文件』
-L         判断是否为一个『 symbolic link 的文件』
-e         判断『文件』是否存在

2、关于程序的逻辑判断
-G         判断是否由 GID 所执行的程序所拥有
-O         判断是否由 UID 所执行的程序所拥有
-p         判断是否为程序间传送信息的 name pipe 或是 FIFO

3、关于文件的属性判断
-r         判断是否为可读的属性
-w         判断是否为可以写入的属性
-x         判断是否为可执行的属性
-s         判断是否为『非空白文件』
-u         判断是否具有『 SUID 』的属性
-g         判断是否具有『 SGID 』的属性
-k         判断是否具有『 sticky bit 』的属性

4、两个文件之间的判断与比较
-nt         第一个文件比第二个文件新
-ot         第一个文件比第二个文件旧
-ef         第一个文件与第二个文件为同一个文件( link 之类的文件)

5. 布尔运算
&&       逻辑与      逻辑与, 逻辑的 AND 的意思, -a 也是这个意思
||          逻辑或      逻辑的 OR 的意思, -o 也是这个意思
!          逻辑非

二、运算符号
=            等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
!=           不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
<            小于 应用于:整型比较 在[] 中,不能使用表示字符串
>            大于 应用于:整型比较 在[] 中,不能使用表示字符串
-eq         等于 应用于:整型比较
-ne         不等于 应用于:整型比较
-lt           小于 应用于:整型比较
-gt         大于 应用于:整型比较
-le         小于或等于 应用于:整型比较
-ge        大于或等于 应用于:整型比较
-a         双方都成立(and) 相当于 &&
-o         单方成立(or) 相当于 ||
-z         空字符串
-n         非空字符串

6. shell $! $# $0 $1的意思
$0       这个程式的执行名字
$n       这个程式的第n个参数值,n=1..9
$*       这个程式的所有参数,此选项参数可超过9个。
$#       这个程式的参数个数
$$       这个程式的PID(脚本运行的当前进程ID号)
$!        执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$?       执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$-       显示shell使用的当前选项,与set命令功能相同
$@     跟 $* 类似,但是可以当作数组用

三、逻辑表达式
注意:所有字符与逻辑运算符直接用“空格”分开,不能连到一起。
1、test 命令
使用方法:test EXPRESSION

如:

2、精简表达式
[] 表达式

注意:在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill码位置作为比较。不直接支持<>运算符,还有逻辑运算符 || 和 && 它需要用-a[and] –o[or]表示。

[[]] 表达式

注意:[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符 || 和 &&

bash 的条件表达式中有三个几乎等效的符号和命令:test,[]和[[]]。通常,大家习惯用if [];then这样的形式。而[[]]的出现,根据ABS所说,是为了兼容><之类的运算符。
不考虑对低版本bash和对sh的兼容的情况下,用[[]]是兼容性强,而且性能比较快,在做条件运算时候,可以使用该运算符。

bash shell中 与[ ]的区别
一,[[用"&&"而不是"-a"表示逻辑"与",用"||"而不是"-o"表示逻辑"或":

二,[ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符”>” 与”<”必须转义,否则就变成IO改向操作符了。[[中"<"与">"不需转义:

三, ... 进行算术扩展,而[ ... ]不做。

四,[[]]能用正则,而[]不行

注意:双引号("")的作用

关注运维天涯微信、新浪微博

评论已关闭