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 ...
随机推荐
- ZOJ 1610 Count the Colors (线段树区间更新)
题目链接 题意 : 一根木棍,长8000,然后分别在不同的区间涂上不同的颜色,问你最后能够看到多少颜色,然后每个颜色有多少段,颜色大小从头到尾输出. 思路 :线段树区间更新一下,然后标记一下,最后从头 ...
- ExtJs之Ext.apply
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- ExtJs之进度条实现
慢慢按书上的作. <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta h ...
- __stdcall 与 __cdecl
(1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈. WIN32 Api都采用_stdcall调用方式,这样的宏定 ...
- Eclipse Java EE 编译器设置JSP默认编码
在windows-preferences-web-jsp files-encoding那里设置默认编码.如下图所示:
- python unittest基本介绍
python内部自带了一个单元测试的模块,pyUnit也就是我们说的:unittest 1.介绍下unittest的基本使用方法: 1)import unittest 2)定义一个继承自unittes ...
- Struts2笔记——struts.xml配置详解
访问HelloWorld应用的路径的设置 * 在struts1中,通过<action path=“/primer/helloWorldAction.action”>节点的path属性指定访 ...
- Linux 关机命令详解
在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各 ...
- C语言:几种字符输入函数的区别
几种字符输入函数的区别: 1.getche()函数:用于从键盘读入一个字符并显示,然后直接执行下一条语 句. 2.getch()函数:用于从键盘中读入一个字符,但不显示在屏幕上, 然后 ...
- GLSL基础
GLSL基础 OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言.因为GPU是多线程并行处理器,所以GLSL直接面向SIMD模型的多线程计算.G ...