第三章、test命令于判断符号

逻辑运算符&&和||

  • &&表示与,||表示或
  • 为了节省计算量,&&||都具备短路原则,利用短路原则,可以简单实现 if else 作用
    expr1 && expr2: 当 expr1 为假时,expr2不被执行
    expr1 || expr2: 当 expr1 为真时,expr2不被执行
  • 表达式中 exit code 为0表示真,为1表示假,这和c/c++完全相反
  • 注意和 expr命令中的 &|区分

test 命令

在命令行中输入man test,可以查看test命令用法。
test用于判断文件类型,以及对变量比较。
test命令用exit code返回结果,而不是使用stdout0表示真,非0表示假

然而 expr 是用 stdout 输出结果, 1表示真,0表示假

xyg@vivo-xyg:~$ test 3 -lt 4 # 为真,返回值为0
xyg@vivo-xyg:~$ echo $? # 输出 test 命令的返回值,输出0

下面有一个利用 && || 实现简单的 if else 语句

xyg@vivo-xyg:~$ ls # 列出文件夹下的所有文件
Desktop Downloads Pictures Public Videos
Documents Music programs Templates xyg
xyg@vivo-xyg:~$ test -e xyg && echo "exist" || echo "not exist" # xyg 文件存在,输出 exist
exist
xyg@vivo-xyg:~$ test -e lucky-light && echo "exist" || echo "not exist" # lucky-light 文件不存在,输出 not exist
not exist

文件类型判断

命令格式:

test -e filename # 判断文件是否存在
test -f filename # 判断是否为文件
test -d filename # 判断是否为目录

用法:

xyg@vivo-xyg:~/xyg/acw_test$ ls -l # 显示所有文件的详细信息
total 8
-rwxrwxr-x 1 xyg xyg 229 7月 4 20:28 expr.sh
drwxrwxr-x 2 xyg xyg 4096 7月 5 20:34 xyg_dir_test
-rw-rw-r-- 1 xyg xyg 0 7月 5 20:34 xyg_file_test
xyg@vivo-xyg:~/xyg/acw_test$ test -e expr.sh # expr.sh 文件存在
xyg@vivo-xyg:~/xyg/acw_test$ echo $?
0
xyg@vivo-xyg:~/xyg/acw_test$ test -e xyg_dir_test # xyg_dir_test 文件夹存在
xyg@vivo-xyg:~/xyg/acw_test$ echo $?
0
xyg@vivo-xyg:~/xyg/acw_test$ test -e xyg_file_test # xyg_file_test 文件存在
xyg@vivo-xyg:~/xyg/acw_test$ echo $?
0
xyg@vivo-xyg:~/xyg/acw_test$ test -e xyg_file_te # xyg_file_te 文件不存在
xyg@vivo-xyg:~/xyg/acw_test$ echo $?
1

test -e 是判断文件是否存在,这里的文件包括了文件夹和文件。

文件权限判断

命令格式:

test -r filename # 判断filename文件是否可读
测试参数 代表含义
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-s 文件是否为空
其中-s判断文件是否为空比较奇怪

整数间的比较

命令格式:

test $a -eq $b # 判断 a, b 是否相等
测试参数 代表含义 缩写
-eq 判断a是否等于b equal
-ne 判断a是否不等于b none equal
-lt 判断a是否小于b less than
-gt 判断a是否大于b greater than
-le 判断a是否小于等于b less equal
-ge 判断a是否大于等于b greater equal

字符串比较

语句 代表含义
test -z STR 判断 STR 是否为空,空为True,exit code=0
test -n STR 判断 STR 是否为非空,非空为True, exit code=0
test STR1 == STR2 判断 STR1 STR2是否相等,相等为True, exit code=0
test STR1 != STR2 判断 STR1 STR2是否不相等,不相等为True, exit code=0
也可以比较大小关系,但是需要转义

遇到文件字符串字典序比较,一旦忘记写转义,直接爆炸,文件覆盖了都

多重条件判定

命令格式:

test -r filename -a -x filename # 判断文件是否可读且可执行
参数 代表含义
-a 与 and test 3 -le 3 -a 4 -eq 5
-o 或 or test 3 -le 3 -o 4 -eq 5
! 非 not test ! ( 3 -le 3 -a 4 -eq 5 )

判断符号 []

[]test用法几乎一模一样,更长常用于 if 语句中。另外[[]][]的加强版,支持的特性更多。

例如:

xyg@vivo-xyg:~/programs$ [ 3 -ne 4 -a 5dsf == 5dsf ] # 试一试 [] 的用法是否和 test 一致
xyg@vivo-xyg:~/programs$ echo $? # 输出 0 表示真
xyg@vivo-xyg:~/xyg/acw_test$ ls # 列出目录下的所有文件
expr.sh xyg_dir_test xyg_file_test
xyg@vivo-xyg:~/xyg/acw_test$ [ -e expr.sh ] && echo "exist" || echo "not exist" # 判断expr.sh 文件是否存在
exist
xyg@vivo-xyg:~/xyg/acw_test$ [ -e expr2.sh ] && echo "exist" || echo "not exist" # 判断expr2.sh 文件是否存在
not exist

注意点

  • []内的每一项都要用空格隔开
  • 中括号内的变量,最好用双引号括起来
  • 中括号内的常数,最好用单或双引号括起来
xyg@vivo-xyg:~/xyg/acw_test$ name="luckylight xyg"
xyg@vivo-xyg:~/xyg/acw_test$ [ $name == "luckylight xyg" ] # 因为 $name 中含有空格,语法出现错误
bash: [: too many arguments
xyg@vivo-xyg:~/xyg/acw_test$ [ "${name}" == "luckylight xyg" ]

参考链接

强烈推荐y总的Linux基础课
Linux 教程 - 孟庆昌

posted @   lucky_light  阅读(310)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示