完全总结bash中的条件判断test [ [[ 使用
在bash脚本编程中,我们经常做一些条件判断, 我们主要用到了三种,test,单中括号,双中括号
经常有看到不同的写法,如:
[ $? –eq 0 ][[ $myvar == “mysql” ]]test 1 -eq 0
并且还有看到一些并且和或的写法,如-a,-o,&&,||。
那这些都是怎么结合,有那么多的比较符号,我怎么记住,有什么注意事项。
1.test命令
test是bash的一个内建命令,用来测试后面给的条件是否为真,如
[root@localhost ~]# test 1 -ne 0[root@localhost ~]# echo $?0[root@localhost ~]# test "hello" == "Hello"[root@localhost ~]# echo $?1
经常有可能我们有很多判断需求,如判断是否是一个文件,字符串是否为空,数值A是否大于B等,有时会记不住,怎么办呢,方法是man test,可以看到它列出了所有的判断符号和说明:
2.单个中括号[ ]判断
事实上事实上[ 这个是个内建命令,可以执行which [查看
[root@localhost test]# which [
/usr/bin/[
即然是命令,那么命令与后面的参数就得用空格隔开,这也就是为什么在使用[时后面需要有一个空格的原因。所以[1=2]这样的写法将会报错。
单中括号与test命令是等价的。
3.双个中括号[[ ]]判断
双括号是不是也是个命令呢,我们也用which看下:
[root@localhost ~]# which [[
/usr/bin/which: no [[ in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
我们再用type命令看下
[root@localhost ~]# type [[
[[ is a shell keyword
可以看到双中括号是shell中的关键字,在这我们也用type看看test与单中括号:
[root@localhost ~]# type test [test is a shell builtin[ is a shell builtin
两个中括号也是用来做判断的,与单个中括号相比,从某方面来讲它更安全一些,如:
[root@localhost ~]# unset myvar
[root@localhost ~]# if [ $myvar -eq 0 ];then echo 1;fi
-bash: [: -eq: unary operator expected
[root@localhost ~]# if [[ $myvar -eq 0 ]];then echo 1;fi
1
[[使用==或!=时支持字符串的模式匹配,比如[[ hello == hell? ]],结果为真。
使用=~操作符时支持正则表达式匹配,如(注意右边的匹配串不要加引号):
[root@localhost ~]# [[ “234” =~ [1-9]{3} ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ "234" =~ "[1-9]{3}" ]]
[root@localhost ~]# echo $?
1
4.如何结合-o -a && || :
因为-a与-o是test与单中括号命令的参数,而&&与||是shell中的关键字,所以-a与-o只能在test与单中括号使用,不能在双中括号使用,而&&和||可以在任何情况使用,如
[root@localhost ~]# test 1 -eq 1 -a 2 -eq 2[root@localhost ~]# echo $?0[root@localhost ~]# [ 1 -eq 1 ] || [ 2 -eq 3 ][root@localhost ~]# echo $?0
注意双号号下这两种写法都可以:
[root@localhost ~]# [[ 1 -eq 1 ]] && [[ 2 -eq 3 ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ 1 -eq 1 || 2 -eq 3 ]]
[root@localhost ~]# echo $?
0
另外,在一些需要使用()分组的情况下,因为test与[是命令,它不解析小括号分组,所以不能在这两个命令中使用小括号来分组
[root@localhost ~]# test ( 1 -eq 2 -o 3 -eq 3 )
-bash: syntax error near unexpected token `1'
5.实践中使用建议:
A.尽量使用双中括号来进行判断
B.在test及单中括号使用中,如果有变量,尽量用双引号括起来
C.与或尽量使用&&与||,而不要使用-a -o
完全总结bash中的条件判断test [ [[ 使用相关推荐
- linux在命令行if,Linux命令之if - Bash中的条件判断语句
用途说明 Shell中的条件判断语句,与其他编程语言类似. 如果需要知道有哪些条件判断方式,通过man test就可以得到帮助. 常用格式 格式一 if 条件; then 语句 fi 格式二 if 条 ...
- shell python比较_shell中的条件判断以及与python中的对比
shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then ...
- mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法
需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性, CASE ...
- bash脚本之条件判断
2019独角兽企业重金招聘Python工程师标准>>> bash中如何实现条件判断? 条件测试类型: 整数测试 字符测试 文件测试 条 ...
- linux grep egrep fgrep bash条件判断 bash测试 if 条件判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- linux shell脚本中 if 条件判断
转载 https://blog.csdn.net/zhan570556752/article/details/80399154 "||"和"&&" ...
- Python中if条件判断语句怎么用?
俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...
- linux中shell条件判断if中的-a到-z的意思
2019独角兽企业重金招聘Python工程师标准>>> 下面我们一起来看一篇关于shell条件判断if中的-a到-z的意思,有需要了解的朋友不防进入参考参考. [ -a FILE ] ...
- .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...
- 中if判断中文_当Excel表格中的条件判断超过8个,用IF函数不容易实现怎么办?...
点击上方蓝字 免费关注 置顶公众号或设为星标,否则可能收不到文章 个人微信号 | (ID:LiRuiExcel520) 微信服务号 | 跟李锐学Excel(ID:LiRuiExcel) 微信公众号 ...
最新文章
- Java中的抽象类和方法
- 银光甘特图/日历图/排程控件GTP.NET for Silverlight介绍及正版下载
- tomcat linux dump,Linux下Tomcat常用命令与配置
- 《C++ Primer》第一章的 Sales_item.h头文件源码
- java编译系统资源不足_Ant编译项目资源不足
- Golang Post传参调用示例
- 命令行模式下获取参数的方法
- 关于异常你还不知道的
- Vue 组件(二)父组件与子组件传递数据 之props
- php有序数组合并,使用Python怎么合并两个有序数组
- Qt4--加密日记本(子例化QMainWindow文本加密解密)
- intel网卡win10 修改mac
- 服务器网卡,10GE设备相关笔记
- 计算机设备全年销售表,2021年计算机机房设备行业财务部门表格模板汇总 .pdf
- 蓝海灵豚医疗器械信息管理系统B/S
- pdf签名无效解决办法_我花了一整天测试了20+款PDF工具,进来评评谁是MVP
- wps怎么做文档分享
- 计算机休眠快还是关机快,电脑关机、休眠、睡眠、快速启动模式的区别介绍
- 组员组长mysql_GitHub - gzh51906/ManKeZhan: 组长:黄林芳 组员:陈炜,王佳伟
- 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】