test命令
发布日期:2021-06-30 20:51:28 浏览次数:2 分类:技术文章

本文共 4858 字,大约阅读时间需要 16 分钟。

概念以及用法:

test命令最短的定义一个可能是评估一个表达式;如果条件为真,则返回一个0值,否则返回一个大于0的值,也可以将其称为假值。检查最后执行命令的状态的最简便方法是$?值。
简单使用举例

[root@localhost zhangy]# test 9.jpg         #判断文件是否存在[root@localhost zhangy]# echo $?            #存在返回0,不存返回10[root@localhost zhangy]# test -d download   #判断目录是不是存在[root@localhost zhangy]# test -w 9.jpg      #判断文件是不是有写的权限[root@localhost zhangy]# test -s test.txt   #判断文件是不是空文件[root@localhost zhangy]# test aaa.txt -nt aaa.bak   #判断aaa.txt是不是比aaa.bak新[root@localhost zhangy]# test 2 -eq 3       #判断2是不是等于3[root@localhost zhangy]# test 3 -gt 2       #判断3是不是大于2[root@localhost zhangy]# aaa='aaa'          #给aaa赋值[root@localhost zhangy]# bbb='bbb'	    #给bbb赋值[root@localhost zhangy]# test aaa = bbb     #判断aaa是不是等于bbb[root@localhost zhangy]# echo $?1[root@localhost zhangy]# test aaa != bbb   #判断aaa是不是不等于bbb[root@localhost zhangy]# echo $?0[root@localhost zhangy]# test -d download -a -w download    #当download为目录,并且可写时为真

01关于某个文件的类型检测是否存在,比如test -e filename

-e 改文件名是否存在
-f该文件名是否为文件
-d该文件是否为目录
-b该文件是否为一个block device
-c 该文件是否为一个character device
-S该文件是否为一个socket文件
-p该文件是否为一个FIFO文件
-L该文件是否为一个连接文档
02关于文件的权限侦测,如test -r filename
-r 侦测该文件是否具有可读属性
-w侦测该文件名是否具有可写属性
-x侦测该文件是否具有可执行的属性
-u侦测该文件是否具有suid属性
-g侦测该文件是否具有sgid属性
-k侦测该文件是否具有sticky bit属性
-s侦测该文件是否是空白文件
03 两个文件之间的比较,比如:test file -nt file2
-nt 判断file1是否比file2新
-ot判断file1是否比file2旧
-ef判断file2与file2是否为同一个文件,可用于判断hard link 的判断。主要意义在于判定,两个文件是否为指向同一个inode。

04 关于两个整数之间的判定,例如:test n1 -eq n2

-eq 两个数值是否相等

-ne两个数值不等
-gt n1 大于n2
-lt n1 小于n2
-ge n1 大于等于n2
-le n1 小于等于n2

数值条件测试可以用于数字和变量上

[root@web02 test]# cat 08.sh #!/bin/basha1=10a2=11if  [ $a1 -gt 5 ]then     echo  "$a1 大于5"fiif [ $a1 -eq $a2 ]then       echo  "$a1 和 $a2相等"else     echo  "不相等"fi[root@web02 test]# sh 08.sh 10 大于5不相等

不能在test命令中使用浮点值

[root@web02 test]# cat 09.sh #!/bin/bahsa1=`echo "scale=4;10 / 3" | bc`echo  "测试值为$a1"if  [ $a1 -gt 3 ]then      echo  "值大于3"fi[root@web02 test]# sh 09.sh 测试值为3.333309.sh: line 4: [: 3.3333: integer expression expected

提示:做这个实验时,需要有bc这个命令,软件包名字为

[root@web02 test]# rpm -qa  bcbc-1.06.95-13.el7.x86_64

05判断字符串的数据

test -z string 判定字符串是否为0 若string为空字符串,则true

test -n string 判定字符串是否为0 若string为空字符串,则为false
注释:-n 亦可以省略
test str1=str2 判定str1是否等于str2 若相等,则回传true
test str1 !=str2 判定str1 是否不等于str2 若相等,则回传false

06 多重条件,例如 test -r filename -a x filename

-a 两个状况同时成立,例如test -r file -a -x file 则file 具有r 或者x 权限时,就可回传true
-o 两个状况任何一个成立,例如test -r file -o -x file 则file具有-r 或者具有x权限时,回传true。
! 反相状态,如test ! -x file 当file 不具有x时,回传true。
比较字符串相等性时,test的比较会将所有的标点和大写也考虑在内

[root@web02 test]# cat 10.sh#!/bin/bash#字符串的相等a=rootif  [ $USER=$a ]then    echo  "hello,$a"fi[root@web02 test]# sh 10.shhello,root

$USER 获取当前用户

[root@web02 test]# cat 11.sh #!/bin/bash#字符串的相等a=studentif  [ $USER != $a ]then    echo "NO,$a"else    echo  "hello,$a"fi[root@web02 test]# sh 11.shNO,student
[root@web02 test]# cat 12.sh#!/bin/basha1=baseballa2=hello#大于小于符号需要转义,否则shell会将符号当做重定向符号而把字符串当做文件名if [ $a1 \> $a2 ]then    echo  "$a1比$a2长"else    echo   "$a1比$a2短"fi[root@web02 test]# sh 12.shbaseball比hello短

出现疑问:

我的疑问就是:它是根据什么认定a1 >a2 的条件是不满足的

未被定义的变量在测试中会被认为是空。

空和未初始化的变量对于shell脚本测试来说,有致命影响,如果你不确定一个变量的内容,最好在数值或者字符串比较中使用-n和-z来测试下这个变量是否含有值。

[root@web02 test]# cat 13.sh#!/bin/basha1=abca2=''if [ -n "$a1" ]then    echo "$a1不为空"else    echo  "$a1为空"fiif [ -z "$a2" ]then    echo  "$a2为空"else    echo  "$a2不为空"fiif  [ -z "$a3" ]then    echo  "$a3为空"else    echo  "$a3不为空"fi```python```python```python[root@web02 test]# sh 13.shabc不为空为空为空

test文件比较

实例1:

[root@web02 test]# cat 14.sh#!/bin/bash#是否存在当前用户的家目录if [ -d $HOME ]then    echo  "家目录存在"    cd $HOME    ls  -aelse    echo  "存在问题"fi[root@web02 test]# sh 14.sh家目录存在.   anaconda-ks.cfg  .bash_logout   .bashrc    .cshrc  .mysql_history  .ssh	test..  .bash_history    .bash_profile  centos.sh  lyh     .pki	       .tcshrc	.viminfo

实例2:

[root@web02 test]# cat 15.sh #!/bin/bashif [ -e $HOME ]then    echo  "存在目录,开始检查文件"    if  [ -e $HOME/wsx ]    then          echo "添加date到存在文件中"        date >> $HOME/wsx    else        echo "建立文件"        date > $HOME/wsxfielse     echo "不存在家目录"fi[root@web02 test]# sh 15.sh存在目录,开始检查文件建立文件[root@web02 test]# sh 15.sh存在目录,开始检查文件添加date到存在文件中

实例3:

[root@web02 test]# cat 16.sh#!/bin/bashif  [ -e $HOME ]then    echo "存在,是否是个文件"    if [ -f $HOME ]    then          echo "是"    else        echo "否"        if [ -f $HOME/.local ]        then            echo  "但这是个文件"        fi     fielse        echo  "不存在"fi[root@web02 test]# sh 16.sh存在,是否是个文件否

符合条件测试

if-then语句允许使用布尔逻辑来组合测试,有两种布尔运算符可用:
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

实例:

[root@web02 test]# cat 17.sh#!/bin/bahsif [ -d $HOME ] && [ -w $HOME/qaz ]then    echo  "存在并可写"else    echo   "不可写"fi[root@web02 test]# sh 17.sh不可写

if-then的高级特性

使用双尖括号 (())
使用方括号
表示通配

实例:

[root@web02 test]# cat 18.sh#!/bin/bashif [ $USER == r* ]then    echo "hello,$USER"else    echo "sorry"fi[root@web02 test]# sh 18.shsorry

转载地址:https://liushiya.blog.csdn.net/article/details/104344650 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ulimit命令以及修改进程limits的方法【转载】
下一篇:nginx upstream简述

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月22日 06时19分53秒