shell编程之逻辑运算

xiaoxiao2021-02-28  87

前言:逻辑运算是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。

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

转载请注明原文地址: https://www.6miu.com/read-36011.html

最新回复(0)