在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 [ [[ 使用相关推荐

  1. linux在命令行if,Linux命令之if - Bash中的条件判断语句

    用途说明 Shell中的条件判断语句,与其他编程语言类似. 如果需要知道有哪些条件判断方式,通过man test就可以得到帮助. 常用格式 格式一 if 条件; then 语句 fi 格式二 if 条 ...

  2. shell python比较_shell中的条件判断以及与python中的对比

    shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then          ...

  3. mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法

    需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性,        CASE           ...

  4. bash脚本之条件判断

    2019独角兽企业重金招聘Python工程师标准>>> bash中如何实现条件判断? 条件测试类型:         整数测试         字符测试         文件测试 条 ...

  5. 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 ...

  6. linux shell脚本中 if 条件判断

    转载 https://blog.csdn.net/zhan570556752/article/details/80399154 "||"和"&&" ...

  7. Python中if条件判断语句怎么用?

    俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...

  8. linux中shell条件判断if中的-a到-z的意思

    2019独角兽企业重金招聘Python工程师标准>>> 下面我们一起来看一篇关于shell条件判断if中的-a到-z的意思,有需要了解的朋友不防进入参考参考. [ -a FILE ] ...

  9. .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  10. 中if判断中文_当Excel表格中的条件判断超过8个,用IF函数不容易实现怎么办?...

    点击上方蓝字  免费关注 置顶公众号或设为星标,否则可能收不到文章 个人微信号 | (ID:LiRuiExcel520) 微信服务号 | 跟李锐学Excel(ID:LiRuiExcel) 微信公众号  ...

最新文章

  1. Java中的抽象类和方法
  2. 银光甘特图/日历图/排程控件GTP.NET for Silverlight介绍及正版下载
  3. tomcat linux dump,Linux下Tomcat常用命令与配置
  4. 《C++ Primer》第一章的 Sales_item.h头文件源码
  5. java编译系统资源不足_Ant编译项目资源不足
  6. Golang Post传参调用示例
  7. 命令行模式下获取参数的方法
  8. 关于异常你还不知道的
  9. Vue 组件(二)父组件与子组件传递数据 之props
  10. php有序数组合并,使用Python怎么合并两个有序数组
  11. Qt4--加密日记本(子例化QMainWindow文本加密解密)
  12. intel网卡win10 修改mac
  13. 服务器网卡,10GE设备相关笔记
  14. 计算机设备全年销售表,2021年计算机机房设备行业财务部门表格模板汇总 .pdf
  15. 蓝海灵豚医疗器械信息管理系统B/S
  16. pdf签名无效解决办法_我花了一整天测试了20+款PDF工具,进来评评谁是MVP
  17. wps怎么做文档分享
  18. 计算机休眠快还是关机快,电脑关机、休眠、睡眠、快速启动模式的区别介绍
  19. 组员组长mysql_GitHub - gzh51906/ManKeZhan: 组长:黄林芳 组员:陈炜,王佳伟
  20. 12uec++多人游戏【自定义碰撞通道+头部暴击+连续开火】

热门文章

  1. javascript自定义滚动条插件,几行代码的事儿
  2. FW:Data Mining UrlScan 3.0 Logs using LogParser 2.2
  3. Django 09-2 模型层 字段
  4. Python类的私有属性
  5. 使用SQL语句操作数据
  6. spring mvc 简单的文件上传与下载
  7. string类常用方法3
  8. xtrabackup之Innobackupex全备数据库
  9. 零零散散的一些知识点(二)
  10. 安装PetShop后调试的诸多问题