资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

Bash的test命令

Java 更新时间: 发布时间: 计算机考试归档 最新发布

Bash的test命令

这个命令在if条件句中用得很多。test命令后都会跟一个表达式,作为它的参数。它有两种写法:

test EXPRESSION
[ EXPRESSION ]

test的执行过程就是拿一个元素与另一个元素进行比较。在网络上找了一个很有意思的例子,用它来说明一下test命令的使用:

test 1 -eq 2 && echo "true" || echo "false"
  • 1:是用来作比较的第一个参数
  • -eq:这是具体的比较方法
  • 2:这是用来比较的第二个参数
    如果比较的结果是true,打印true,否则打印false

我们可以通过$?拿到test的结果。如果表达式的值是false,则$?的值是1,否则就是0。

上面的语句与下同的表达是一样的:

[ 1 -eq 2 ] && echo "true" || echo "false"

整型相关的表达式用到的两个数据的比较方法如下:

  • -eq:等于 (equal to)
  • -ne:等于 (not equal to)
  • -gt:大于 (greater than)
  • -ge:大于或等于(greater than or equal to)
  • -lt:小于 (less than)
  • -le:小于或等于(less than or equal to)
#!/usr/bin/env bash

test 1 -eq 2 && echo "true" || echo "false"
test 1 -ne 2 && echo "true" || echo "false"
test 1 -gt 2 && echo "true" || echo "false"
test 1 -ge 2 && echo "true" || echo "false"
test 1 -lt 2 && echo "true" || echo "false"
test 1 -le 2 && echo "true" || echo "false"

[ 1 -eq 2 ] && echo "true" || echo "false"
[ 1 -ne 2 ] && echo "true" || echo "false"
[ 1 -gt 2 ] && echo "true" || echo "false"
[ 1 -ge 2 ] && echo "true" || echo "false"
[ 1 -lt 2 ] && echo "true" || echo "false"
[ 1 -le 2 ] && echo "true" || echo "false"

shell提供了字符串比较相关的表达式:

  • -n : 字符串长度不为零
  • -z : 字符串长度为零
  • : 字符串值非零,与 -n 等价
  • = : 两个字符串是否相等
  • != : 两个字符串是否不相等
    针对字符串,shell提供了这些方便使用的表达式。比如说:-n 这个表达式就是将字符串长度与0作比较。其他依次类推。
test -n string1 && echo "true" || echo "false"
test -z string1 && echo "true" || echo "false"
test string1 && echo "true" || echo "false"
test string1=string2 && echo "true" || echo "false"
test string1!=string2 && echo "true" || echo "false"

[ -n string1 ] && echo "true" || echo "false"
[ -z string1 ] && echo "true" || echo "false"
[ string1 ] && echo "true" || echo "false"
[ string1=string2 ] && echo "true" || echo "false"
[ string1!=string2 ] && echo "true" || echo "false"

shell也提供了与文件相关的比较表达式:

  • -ef : 两个文件是否有相似的device和inode编号(这些概念在Linux相关的知识可以了解到。)

  • -nt :通过比较文件的修改日期,判断file1是否比file2要新。(nt :newer than)

  • -ot :通过比较文件的修改日期,判断file1是否比file2要旧。(ot :older than)

  • -e :文件是否存在(exists)

  • -f :文件存在且是一个常规文件(file)

  • -d :文件存在且是一个目录(directory)

  • -r :文件存在且有读权限(read)

  • -w :文件存在且有写权限(write)

  • -x :文件存在且有执行权限 (execute)

  • -s :文件存在且文件大小大于0(size)

  • -S :文件存在且文件是一个socket

  • -O :文件存在且文件所有者是有效的用户ID(owner)

  • -G :文件存在且文件所有者是有效的用户组ID(group)

  • -h :文件存在且是一个符号连接文件(hard)

  • -L :文件存在且是一个符号连接文件(link)

  • -b :文件存在且是一个特殊块文件(block)

  • -c :文件存在且是一个特殊字符文件(character)

#!/usr/bin/env bash

test -e /bin/bash && echo $? || echo $?
test -f /bin/bash && echo $? || echo $?
test -d /bin/bash && echo $? || echo $?
test -r /bin/bash && echo $? || echo $?
test -w /bin/bash && echo $? || echo $?
test -x /bin/bash && echo $? || echo $?
test -s /bin/bash && echo $? || echo $?
test -S /bin/bash && echo $? || echo $?
test -O /bin/bash && echo $? || echo $?
test -G /bin/bash && echo $? || echo $?
test -h /bin/bash && echo $? || echo $?
test -L /bin/bash && echo $? || echo $?
test -b /bin/bash && echo $? || echo $?
test -c /bin/bash && echo $? || echo $?

#!/usr/bin/env bash

[ -e /bin/bash ] && echo $? || echo $?
[ -f /bin/bash ] && echo $? || echo $?
[ -d /bin/bash ] && echo $? || echo $?
[ -r /bin/bash ] && echo $? || echo $?
[ -w /bin/bash ] && echo $? || echo $?
[ -x /bin/bash ] && echo $? || echo $?
[ -s /bin/bash ] && echo $? || echo $?
[ -S /bin/bash ] && echo $? || echo $?
[ -O /bin/bash ] && echo $? || echo $?
[ -G /bin/bash ] && echo $? || echo $?
[ -h /bin/bash ] && echo $? || echo $?
[ -L /bin/bash ] && echo $? || echo $?
[ -b /bin/bash ] && echo $? || echo $?
[ -c /bin/bash ] && echo $? || echo $?

shell提供了上面这些方便的表达式,我们就少做了很多功夫。

所以,现在看来test很简单,但是很有用。因为shell脚本里会出现很多条件语句,test会用到很多。

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1094140.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【Bash的test命令】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2