Linux中的判断与比较——测试命令test

编程入门 行业动态 更新时间:2024-10-07 09:28:35

Linux中的判断与比较——测试<a href=https://www.elefans.com/category/jswz/34/1771323.html style=命令test"/>

Linux中的判断与比较——测试命令test

博客主页:
博主昵称:农民工老王
主要领域:Java、Linux、K8S
期待大家的关注💖点赞👍收藏⭐留言💬

目录

  • test命令介绍
  • 文件测试
  • 整数测试
  • 字符串测试
  • 测试的再加工

test命令介绍

在Linux中通常将判断与比较称为测试,由test命令实现。
test命令可实现文件测试、整数比较测试、字符串测试。
test测试语句常常简化为[ ]符号。
[ ]符号还有扩展写法[[ ]],在原有的基础上,增加对<>的支持,并用&&ll替换原有的-a 、-o 。
test命令中单等号=和双等号==等价,能用于字符串、整数的相等判断,本人推荐使用==
测试命令test的简化符号、扩展简化符号常用于if语句中。
test单独使用时,如果测试结果为真,那么echo $? 返回0,否则返回其他值。

注意:中括号[ ]与判断条件之间必须存在空格。
注意:判断条件的判断符号与比较值之间也需要存在空格。

文件测试

常用的如下表。

操作符说明举例 file=/etc/hosts
-b检测文件是否是块设备文件[ -b “${file}” ] 返回 false。
-c检测文件是否是字符设备文件[ -c “${file}” ] 返回 false。
-d检测文件是否是目录[ -d “${file}” ] 返回 false。
-e检测文件(包括目录)是否存在[ -e “${file}” ] 返回 true。
-f检测文件是否是普通文件(既不是目录,也不是设备文件[ -f “${file}” ] 返回 true。
-g文件是否是设置了组ID[ -g “${file}” ] 返回 false。
-G文件属于的有效组ID[ -G “${file}” ] 返回 false。
-h文件是否是一个符号链接(同-L)[ -h “${file}” ] 返回 false。
-k检测文件是否设置了粘着位(Sticky Bit)[ -k “${file}” ] 返回 false。
-L文件是否是一个符号链接(同-h)[ -L “${file}” ] 返回 false。
-O文件的属于有效用户ID[ -O “${file}” ] 返回 false。
-p检测文件是否是有名管道[ -p “${file}” ] 返回 false。
-r检测文件是否可读[ -r “${file}” ] 返回 true。
-s检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s “${file}” ] 返回 true。
-t文件描述符是在一个终端打开的[ -s “${file}” ] 返回 false。
-u检测文件是否设置了 SUID 位[ -u “${file}” ] 返回 false。
-w检测文件是否可写[ -w “${file}” ] 返回 true。
-x检测文件是否可执行[ -x “${file}” ] 返回 true。
–ef两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。-
–nt判断文件1是否比文件2新-
–ot判断文件1比是否文件2旧-

注意:变量为空字符串的判断,存在是否加引号的区别。

#!/bin/sh
#文件名:test.sh
test=""
if [ -d "$test" ]; thenecho 'd加引号'
fiif [ -e "$test" ]; thenecho 'e加引号'
fiif [ -f "$test" ]; thenecho 'f加引号'
fiif [ -d $test ]; thenecho 'd'
fiif [ -e $test ]; thenecho "e"
fiif [ -f $test ]; thenecho 'f'
fi

整数测试

num1-eq num2
等于
例如:[ 3 -eq $mynum ]

num1-ne num2
不等于
例如:[ 3 -ne $mynum ]

num1-lt num2
小于
例如:[ 3 -lt $mynum ]

num1-le num2
小于或等于
例如:[ 3 -le $mynum ]

num1-gt num2
大于
例如:[ 3 -gt $mynum ]

num1-ge num2
大于或等于
例如:[ 3 -ge $mynum ]

字符串测试

-z string 如果string长度为0,则为真
例如: [ –z “$var”]

-n string
如果string长度非0,则为真
例如: [ –n “$var”]

str1 = str2
如果str1与str2相同,则为真
例如:[ “$var” = ”hello world”]

str1 != str2
如果str1与str2不相同,则为真
例如:[ “$var” != ”hello world”]

测试的再加工

( [ 测试表达式 ] ) :将括号内的测试结果作为一个整体。
[ ! 测试表达式 ] :非,测试结果的取反。
[ 测试表达式1 -a 测试表达式2 ] :与,两个表达式结果都为真时,为真。
[ 测试表达式1 -o 测试表达式2 ]:或,两个表达式结果有一个为真时,为真。

注意两个test命令的与或计算时,只能用|| 和&& 。
如:[ 测试表达式1 ] && [ 测试表达式2 ][ 测试表达式1 ] || [ 测试表达式2 ]

# 展示 () 和 ! 功能
! [ "laowang" == "csdn" ] && [ 1 -eq 2 ]     ; echo $?
! ( [ "laowang" == "csdn" ] && [ 1 -eq 2 ] ) ; echo $?# 展示[] 和 [[]] 在 “与表达式”的写法差异
## 正确的写法
[ "laowang" == "csdn" -a 1 -eq 2 ]           ; echo $?
[[ "laowang" == "csdn" && 1 -eq 2 ]]         ; echo $?
[ "laowang" == "csdn" ] && [ 1 -eq 2 ]       ; echo $?
[[ "laowang" == "csdn" ]] && [[ 1 -eq 2 ]]   ; echo $?
## 错误的写法
[[ "laowang" == "csdn" -a 1 -eq 2 ]]         ; echo $?
[ "laowang" == "csdn" && 1 -eq 2 ]           ; echo $?
[ "laowang" == "csdn" ] -a [ 1 -eq 2 ]       ; echo $?
[[ "laowang" == "csdn" ]] -a [[ 1 -eq 2 ]]   ; echo $?


如需转载,请注明本文的出处:农民工老王的CSDN博客 。

更多推荐

Linux中的判断与比较——测试命令test

本文发布于:2024-02-28 02:52:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767550.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令   测试   Linux   test

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!