shell编程之逻辑运算

来源:互联网 发布:java 方法上的泛型 编辑:程序博客网 时间:2024/05/21 09:42

前言:逻辑运算是shell编程的基础,以后的判断语句,循环语句都将用到逻辑运算,熟练掌握逻辑运算是学好shell编程和其他编程的基础。

1.逻辑运算的基础

由于计算机只认识1和0两个状态,因此将各种结果分为两种情况,TRUE(真)FALSE(假),可以用1和0表示也可用0和1表示。本博客使用1表示真,0表示假进行说明

2.逻辑运算的运算公式

&&(与)运算
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
即:与运算,两者都真才为真。

|| (或)运算
1 || 1 = 1
1 || 0 = 1
0 || 1 = 1
0 || 0 = 0
即:或运算,两者都假才为假。

!(非)运算
!1 = 0
!0 = 1
即:非运算,真变假,假变真

短路运算
短路与
第一个为0,结果必定为0
第一个为1,第二个必须要参与运算

短路或
第一个为1,结果必定为1
第一个为0,第二个必须要参与运算

异或:^
异或的两个值,相同为假,不同为真

3.逻辑运算的测试

逻辑预算有三种测试方法:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
注意EXPRESSION前后必须有空白字符

这三种方式几乎没有区别,小编善于使用[],因此本博客使用[]进行测试,如果有区别将会指出。
[ 其实是个bash的内建命令,不要以为命令名只能是普通的字符。
这里写图片描述

[ 命令有以下选项
] [命令必须添加的参数,使用空格隔开的原因,因为]是[的一个参数
1.数字比较大小
[ a -eq b ] : 判断a是否等于b
[ a -gt b ] : 判断a是否大于b
[ a -lt b ] : 判断a是否小于b
[ a -ge b ] : 判断a是否大于等于b
[ a -le b ] : 判断a是否小于等于b
这里写图片描述
2.文件判断
-a 判断文件存在则为真
-e 同-a
-b 判断文件为块设备文件则为真
-c 判断文件为字符文件则为真
-d 判断文件为目录文件则为真
-f 判断文件为普通文件则为真
-h 判断文件为软链接文件则为真
-L 同-h
-p 是否存在且为命名管道文件
-S 是否存在且为套接字文件
-r 判断当前用户对该文件可读时为真(root永远为真)
-w 判断当前用户对该文件可写时为真(root永远为真)
-x 判断当前用户对该文件写执行为真(只要有任意位置有x,root则为真)
-u 判断该文件有suid权限为真(对于非二进制文件加上suid即使为真也无效)
-g 判断该文件有sgid权限为真(对于非二进制文件加上sgid即使为真也无效,目录有效)
-k 判断文件是否有sticky权限 (对于普通文件没有意义)
-s 判断文件(非目录)为非空时为真。
-N 判断文件在上一次读取后被改过则为真。
-O 判断文件的owner为当前用户时为真
-G 判断文件的group是当前用户的主组时为真
-ef 判断两个文件是硬链接时为真
-nt 判断前一个文件的mtime新于后一个文件时为真
-ot 判断前一个文件的mtime旧于后一个文件时为真
这里写图片描述
字符串测试:
==是否等于

ascii码是否大于ascii码
<是否小于
!=是否不等于
=~左侧字符串是否能够被右侧的PATTERN所匹配
注意: 此表达式一般用于[[ ]]中;扩展的正则表达式
-z “STRING“字符串是否为空,空为真,不空为假
-n “STRING“字符串是否不空,不空为真,空为假
这里写图片描述

()的作用
()可以将一个表达式连接成一个整体,比方说a&&b||c原本是按照从左到右的顺序,但是添加一个()后变为a&&(b||c)则在判断是会将b||c作为一个整体,可用exit退出一层(),如果没有(),则退出shell。

作为编程的基础,需要熟练掌握逻辑判断,只有自己动手才能有体会。加油

原创粉丝点击