bash test命令探秘
shell 测试条件命令
http://blog.csdn.net/yangruibao/article/details/7427503
test 和 [ 命令
虽然 Linux 和 UNIX 的每个版本中都包含 test 命令,但该命令有一个更常用的别名 — 左方括号:[。test 及其别名通常都可以在 /usr/bin 或 /bin (取决于操作系统版本和供应商)中找到。
当您使用左方括号而非 test 时,其后必须始终跟着一个空格、要评估的条件、一个空格和右方括号。右方括号不是任何东西的别名,而是表示所需评估参数的结束。条件两边的空格是必需的,这表示要调用 test,以区别于同样经常使用方括号的字符/模式匹配操作。
test 和 [ 的语法如下:
test expression
[ expression ]
在这两种情况下,test 都评估一个表达式,然后返回真或假。如果它和 if、while 或 until 命令结合使用,则您可以对程序流进行广泛的控制。不过,您无需将 test 命令与任何其它结构一起使用;您可以从命令行直接运行它来检查几乎任何东西的状态。
参考总结
http://blog.csdn.net/vah101/article/details/6249006
三种方式
https://www.ibm.com/developerworks/library/l-bash-test/index.html
test and [
The
testbuiltin command returns 0 (True) or 1 (False), depending on the evaluation of an expression, expr. You can also use square brackets:test exprand [ expr ] are equivalent. You can examine the return value by displaying$?; you can use the return value with && and ||; or you can test it using the various conditional constructs that are covered later in this tip.Listing 1. Some simple tests
123456[ian@pinguino ~]$ test 3 -gt 4 && echo True || echo falsefalse[ian@pinguino ~]$ [ "abc" != "def" ];echo $?0[ian@pinguino ~]$ test -d "$HOME" ;echo $?0
(( and [[
The
testcommand is very powerful, but somewhat unwieldy given its requirement for escaping and given the difference between string and arithmetic comparisons. Fortunately, bash has two other ways of testing that are somewhat more natural for people who are familiar with C, C++, or Java® syntax.The
(( ))compound command evaluates an arithmetic expression and sets the exit status to 1 if the expression evaluates to 0, or to 0 if the expression evaluates to a non-zero value. You do not need to escape operators between((and)). Arithmetic is done on integers. Division by 0 causes an error, but overflow does not. You may perform the usual C language arithmetic, logical, and bitwise operations. Theletcommand can also execute one or more arithmetic expressions. It is usually used to assign values to arithmetic variables.Listing 5. Assigning and testing arithmetic expressions
123456[ian@pinguino ~]$ let x=2 y=2**3 z=y*3;echo $? $x $y $z0 2 8 24[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w0 3 8 16[ian@pinguino ~]$ (( w=(y/x) + ( (~ ++x) & 0x0f ) )); echo $? $x $y $w0 4 8 13As with
(( )), the[[ ]]compound command allows you to use more natural syntax for filename and string tests. You can combine tests that are allowed for thetestcommand using parentheses and logical operators.Listing 6. Using the [[ compound
123[ian@pinguino ~]$ [[ ( -d "$HOME" ) && ( -w "$HOME" ) ]] &&> echo "home is a writable directory"home is a writable directoryThe
[[compound can also do pattern matching on strings when the=or!=operators are used. The match behaves as for wildcard globbing as illustrated in Listing 7.Listing 7. Wildcard tests with [[
123456[ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]*\ ?d* ]]; echo $?0[ian@pinguino ~]$ [[ "abc def c" == a[abc]*\ ?d* ]]; echo $?1[ian@pinguino ~]$ [[ "abc def d,x" == a[abc]*\ ?d* ]]; echo $?1You can even do arithmetic tests within
[[compounds, but be careful. Unless within a((compound, the<and>operators will compare the operands as strings and test their order in the current collating sequence. Listing 8 illustrates this with some examples.
测试种类参考:
https://linuxacademy.com/blog/linux/conditions-in-bash-scripting-if-statements/
test 和 [[ 本质不同
https://stackoverflow.com/questions/14496428/meaning-of-double-square-brackets-in-bash
[[ is a much more versatile version of [ in bash.
For example, Using the [[ ... ]] test construct, rather than [ ... ] can prevent many logic errors in scripts. For example, the &&, ||, <, and > operators work within a [[ ]] test, despite giving an error within a [ ] construct.
also, their implementations are different
-bash-3.2$ type [
[ is a shell builtin
-bash-3.2$ type [[
[[ is a shell keyword
Refer here for a good explanation
bash test命令探秘的更多相关文章
- bash shell命令(2)
在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...
- ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数
一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...
- 第四章:更多的bash shell命令
第四章:更多的bash shell命令 监测程序 ps (其他ps内容见#1 ) Unix风格的ps命令参数 参数 描述 -A 显示所有进程 -N 显示与指定参数不符的所有进程 -a 显示除控制进程( ...
- Bash : test 命令
在 Bash 脚本中我们一般会使用 test 命令来进行条件检查.test 命令的返回值为 0 或 1.0 表示 true, 1 表示 false.简单起见,我们可以直接认为 test 的结果为 tr ...
- cmd 与 bash 基础命令入门
身为一个程序员会用命令行来进行一些简单的操作,不是显得很装逼嘛!?嘿嘿~ ヾ(>∀<) cmd 与 bash 基础命令入门 简介 CMD 基础命令 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- bash 基础命令
bash的基础特性(): () 命令历史 history 环境变量: HISTSIZE:命令历史记录的条数: HISTFILE:~/.bash_history: HISTFILESIZE:命令历史文件 ...
- 基本bash shell命令
以下列举一些常用的bash shell命令,在使用时方便查找. 访问Linux系统上的手册:man 命令.例:man ps 手册是由分页程序来显示的,可以通过点击 空格,回车,向上和向下箭头 ...
- bash shell命令与监测的那点事(三)
bash shell命令与监测的那点事之df与du 前两篇介绍了bash shell的进程监控指令,但是有时候你需要知道在某个设备上还有多少磁盘空间.首先介绍df命令: df命令 df命令就是用来轻松 ...
随机推荐
- __init__和__new__的异同
实例化类的流程: 1.p = Person(name, age)2.首先执行使用name和age参数来执行Person类的__new__方法,这个__new__方法会 返回Person类的一个实例(p ...
- CAN协议,系统结构和帧结构
CAN:Controller Area Network,控制器局域网 是一种能有效支持分布式控制和实时控制的串行通讯网络. CAN-bus: Controller Area Network-bus,控 ...
- centos7下利用httpd2.4配置svn并使用Ldap用户认证
应用场景:Windows下有AD活动目录,类Unix系统下有Ldap,在运维开发工具平台逐步丰富的现在,统一用户管理大大便捷了管理人员. 其中不乏经典版本控制管理工具svn,与Ldap组合的用户认证方 ...
- JVM内存模型你只要看这一篇就够了
JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...
- 洛谷P3980 志愿者招募
题意:懒得写了...... 解: 一开始想的是每天建点,每种人建点,然后连边费用流,发现一个人可以管辖多天,不好处理. 回想起了网络流24题中的"最长k可重线段集","最 ...
- django 前端 js让一段文本中包含的网址可以被访问
这个功能还是挺刚需的,下面说说实现过程,用到了正则表达式. 1.原本的html部分代码: <h4 id="softadd">链接: https://pan.baidu. ...
- 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)
怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...
- Codeforces Round #523 (Div. 2) B Views Matter
传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 这是一道贪心题么???? 题意: 某展览馆展览一个物品,此物品有n堆,第 i 堆有a[ ...
- (贪心 map) Flying to the Mars hdu1800
Flying to the Mars Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- vue购物车和地址选配(三)
参考资料:vue.js官网 项目演示: 项目源代码: 核心代码及踩坑 删除: new Vue({ el:'#app', data:{ productlist:[], totalMoney:0, che ...