Shell脚本学习之逻辑判断
2015-07-17 10:27
351 查看
Shell脚本的if语句、循环语句中都会有一个逻辑判断式。逻辑判断式用于各种条件的判断,除非程序是流水账,否则是一定会用到逻辑判断的,可见其重要性。
Shell的逻辑判断,我目前所知共有两种:
1、test命令,可以结合命令执行结果变量($?)或者&&以及||来实现不同条件走不同分支
2、[ 条件判断 ],这种方式常用于if语句和while语句中
这是一些常用的test命令的参数,“[]”的用法与test命令类似,只要去掉test这个命令就行,其余不变。
关于&&和||
这个是用于联合两个命令的,逻辑与(&&)和逻辑或(||),在if和循环的判断式中的意义与C语言中是一样的。
逻辑与:表示两个同时为真,则改表达式为真,否则为假。
逻辑或:表示任意一个为真,则表达式为真,否则为假。
但是在test命令中,这两个操作符的意义有所 不同
如果是多于两个命令的联合,执行结果会不断的往后传,影响后面的判断。同时因为$?只有一个,所以这个影响有个就近原则。
Shell的逻辑判断,我目前所知共有两种:
1、test命令,可以结合命令执行结果变量($?)或者&&以及||来实现不同条件走不同分支
2、[ 条件判断 ],这种方式常用于if语句和while语句中
参数 | 功能 | 说明 |
-e | 文件是否存在 | 对文件类型的判断 test -e file |
-f | 判断文件名是否存在且为文件 | |
-d | 判断文件名是否存在且为目录 | |
-r | 判断对该文件是否有“可读”权限 | 对文件权限的检测 test -r file |
-w | 判断对该文件是否有“可写”权限 | |
-x | 判断对该文件是否有“可执行”权限 | |
-nt | (newer than)判断file1是否比file2新 | 两个文件之间的比较 test file1 -nt file2 |
-ot | (older than)判断file1是否比file2旧 | |
-ef | 判断file1和file2是否为同一文件 | |
-eq | 两数值是否相等(equal) | 两个整数之间的比较 test n1 -eq n2 |
-ne | 两数值是否不等(not equal) | |
-gt | n1大于n2(greater than) | |
-lt | n1小于n2(less than) | |
-ge | n1大于等于n2(greater than or equal) | |
-le | n1小于等于n2(less than or equal) | |
test -z string | 判断字符串是否为空,如果为空,则为true | 字符串的判断 对参与判断的字符串,最好加上""",如"$var"这样的格式,不然会产生“参数过多”的错 判断相等的时候,"="和"=="是等效的 |
test -n string | 判断字符串是否为空,如果为空,则返回false | |
test str1=str2 | 判断str1是否等于str2,若相等,则返回true | |
test str1!=str2 | 判断str1是否不等于str2,若相等,则返回false | |
-a | 两个条件同时成立则为真 test -r file1 -a test -x file2 | 多重条件的判断 |
-o | 两个条件任意一个成立则为真 test -r file1 -a test -x file2 | |
! | 对测试条件结果取反 test ! -x file |
关于&&和||
这个是用于联合两个命令的,逻辑与(&&)和逻辑或(||),在if和循环的判断式中的意义与C语言中是一样的。
逻辑与:表示两个同时为真,则改表达式为真,否则为假。
逻辑或:表示任意一个为真,则表达式为真,否则为假。
但是在test命令中,这两个操作符的意义有所 不同
命令格式 | 解释 |
cmd1 && cmd2 | 若cmd1执行完毕且正确执行($?=0),则开始执行cmd2 若cmd1执行完毕且返回出错($?≠0),则不执行cmd2 |
cmd1 || cmd2 | 若cmd1执行完毕且正确执行($?=0),则不执行cmd2 若cmd1执行完毕且返回出错($?≠0),则执行cmd2 |
相关文章推荐
- Linux socket 初步
- android wifi 无线调试
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝