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 ...
随机推荐
- 评论 “App死亡潮:400万应用僵尸超八成,周期仅10月”
点这里 原文: App死亡潮:400万应用僵尸超八成,周期仅10月 时间 2015-04-05 22:48:19 和讯科技相似文章 (16)原文 http://tech.hexun.com/201 ...
- HDU 1041 Computer Transformation (简单大数)
Computer Transformation http://acm.hdu.edu.cn/showproblem.php?pid=1041 Problem Description A sequenc ...
- 获取及管理Android 手机运营商及状态
主要类 TelephonyManager: telephonyManager.getCellLocation();//获得服务区 telephonyManager.getCellId();//获得服务 ...
- OPEN资讯
http://www.open-open.com/news/view/1f55540 随着 Android 平台市场份额的持续猛增 , 越来越多的开发者开始投入 Android 应用程序的开发大潮.如 ...
- Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的解决办法
Tomcat启动时报如下错误: java.lang.OutOfMemoryError: PermGen space 解决办法: 配置相关内存大小.其中按照启动tomcat的不同方式,分如下三种情况 a ...
- JS加载时间线
1.创建Document对象,开始解析web页面.解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中.这个阶段document.readyState = 'loading' ...
- Linux基础--例行工作
1.仅进行一次的工作排程--at at的工作情况其实是这样的: 1)先找寻/etc/at.allow这个档案,写在这个档案中的使用者才能使用at,没有在这个档案中的使用者则不能使用at(即使没有写在a ...
- How to configure Spring facet in IntelliJ IDEA
遇到了这个问题,稀里糊涂的就给搞定了,在stackoverfolw上看到了相同的问题,直接拷贝下来吧 Spring Configuration Check Unmapped Spring config ...
- Redis的Set操作
集合的性质: 唯一性,无序性,确定性 注: 在string和link的命令中,可以通过range 来访问string中的某几个字符或某几个元素 但,因为集合的无序性,无法通过下标或范围来访问部分元素. ...
- SSIS ->> Data Flow Design And Tuning
Requirements: Source and destination system impact Processing time windows and performance Destinati ...