Linux Shell编程(4): 逻辑运算符、逻辑表达式详解
shell的逻辑运算符 涉及有以下几种类型,因此只要适当选择,可以解决我们很多复杂的判断,达到事半功倍效果。
一、逻辑运算符
| 逻辑卷标 | 表示意思 |
| 1. | 关于档案与目录的侦测逻辑卷标! |
| -f | 常用!侦测『档案』是否存在 eg: 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. | 两个档案之间的判断与比较 ;例如[ test file1 -nt file2 ] |
| -nt | 第一个档案比第二个档案新 |
| -ot | 第一个档案比第二个档案旧 |
| -ef | 第一个档案与第二个档案为同一个档案( link 之类的档案) |
| 5. | 逻辑的『和(and)』『或(or)』 |
| && | 逻辑的 AND 的意思 |
| || | 逻辑的 OR 的意思 |
| 运算符号 | 代表意义 |
| = | 等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串 |
| != | 不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串 |
| < | 小于 应用于:整型比较 在[] 中,不能使用 表示字符串 |
| > | 大于 应用于:整型比较 在[] 中,不能使用 表示字符串 |
| -eq | 等于 应用于:整型比较 |
| -ne | 不等于 应用于:整型比较 |
| -lt | 小于 应用于:整型比较 |
| -gt | 大于 应用于:整型比较 |
| -le | 小于或等于 应用于:整型比较 |
| -ge | 大于或等于 应用于:整型比较 |
| -a | 双方都成立(and) 逻辑表达式 –a 逻辑表达式 |
| -o | 单方成立(or) 逻辑表达式 –o 逻辑表达式 |
| -z | 空字符串 |
| -n | 非空字符串 |
二、逻辑表达式
- test 命令
使用方法:test EXPRESSION
如:
[root@localhost ~]# test 1 = 1 && echo 'ok'
ok[root@localhost ~]# test -d /etc/ && echo 'ok'
ok[root@localhost ~]# test 1 -eq 1 && echo 'ok'
ok[root@localhost ~]# if test 1 = 1 ; then echo 'ok'; fi
ok
注意:所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。
- 精简表达式
- [] 表达式
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok[root@localhost ~]# [ 2 < 1 ] && echo 'ok'
-bash: 2: No such file or directory[root@localhost ~]# [ 2 \< 1 ] && echo 'ok'
[root@localhost ~]# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'
-bash: [: missing `]'注意:在[] 表达式中,常见的>,<需要加转义字符,表示字符串大小比较,以acill码 位置作为比较。 不直接支持<>运算符,还有逻辑运算符|| && 它需要用-a[and] –o[or]表示
- [[]] 表达式
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok[root@localhost ~]$ [[ 2 < 3 ]] && echo 'ok'
ok[root@localhost ~]$ [[ 2 < 3 && 4 > 5 ]] && echo 'ok'
ok
注意:[[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| &&
Linux Shell编程(4): 逻辑运算符、逻辑表达式详解的更多相关文章
- Linux Shell编程与编辑器使用详解
<Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...
- Linux shell 的 test 命令用法详解
基本格式:test expression expression为test命令构造的表达式.这里expression是test命令可以理解的任何有效表达式,该简化格式将是读者可能会踫见的最常用格式返回值 ...
- linux系统编程:守护进程详解及创建,daemon()使用
一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...
- 【转】Linux系统编程---dup和dup2详解
正常的文件描述符: 在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的节点指针会指向节点表.看下图: 打开文件的内核数据结构 dup和dup2两个函 ...
- 轻松学习Linux之Shell文件和目录属性详解
轻松学习Linux之Shell文件和目录属性详解 轻松学习Linux之理解Sitcky 轻松学习Linux之理解umask 轻松学习Linux之理解SUID&SGUID 本系列多媒体教程已完成 ...
- shell编程之awk命令详解
shell编程之awk命令详解 a:focus { outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; out ...
- Linux Bash命令关于程序调试详解
转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- (转)Linux 开机引导和启动过程详解
Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...
随机推荐
- SqlServer 常用
Sql的函数 newId() 获得guid: getDatatime() 获得当前时间: Row_number() 分页常用的函数. 比top 好用的函数select Row_Number() ov ...
- POJ 3304 Segments (直线与线段是否相交)
题目链接 题意 : 能否找出一条直线使得所有给定的线段在该直线上的投影有一个公共点. 思路 : 假设存在一条直线a使得所有线段在该直线上的投影有公共点,则必存在一条垂直于直线a的直线b,直线b与所有线 ...
- 【转载】 硬盘主引导记录(MBR)及其结构详解
硬盘的0柱面.0磁头.1扇区称为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR).该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统 ...
- 【XJOI-NOIP16提高模拟训练9】题解。
http://www.hzxjhs.com:83/contest/55 说实话这次比赛真的很水..然而我只拿了140分,面壁反思. 第一题: 发现数位和sum最大就是9*18,k最大1000,那么su ...
- 【poj3208-Apocalypse Someday】数位DP
题意:问你在所有包含666的数中,第n大的是多少.(1 ≤ n ≤ 50,000,000) .开头几个是666, 1666, 2666, 3666, 4666, 5666… 题解: 这题可以用AC自动 ...
- redhat6修改主机名
1.临时修改主机名 sudo hostname lyhost 2.永久修改主机名 vim /etc/sysconfig/network 修改里面的hostname字段即可,重启后生效.
- lintcode:恢复IP地址
恢复IP地址 给一个由数字组成的字符串.求出其可能恢复为的所有IP地址. 样例 给出字符串 "25525511135",所有可能的IP地址为: [ "255.255.11 ...
- [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。
遇到的情景: sta.executeUpdate("insert into 表1(longitude,latitude,time) values("+a[0]+",&qu ...
- Zen Coding 用法
html:5 或者 ! 生成 HTML5 结构html:xt 生成 HTML4 过渡型html:4s 生成 HTML4 严格型 E 元素名 (div, p);E#id 带id的元素 (div#cont ...
- Java:编码的详解
ASCII:美国信息标准信息码,用一个字节的7为表示. ISO8859-1:拉丁码表 欧洲码表 ,用一个字节的8位表示. GB2312:中国的中文编码表. GBK:中国的中文编码表升级,融合了更多的中 ...