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 若相等,则回传false06 多重条件,例如 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月22日 06时19分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Excel表格数据生成ECharts图表
2019-04-30
阿里云短信服务python版,pyinstaller打包运行时缺少文件
2019-04-30
Oracle的pfile和spfile的一点理解和笔记
2019-04-30
WebService的简单案例记录(Java)
2019-04-30
Html利用PHP与MySQL交互
2019-04-30
dos简单命令
2019-04-30
mysql的安装与卸载与Navicat远程连接
2019-04-30
java实现稀疏数组及将稀疏数组存入硬盘中
2019-04-30
2021-05-18
2019-04-30
Flutter 使用插件打开相册、相机
2019-04-30
libuv实现tcp代理服务器
2019-04-30
libuv使用不当导致的内存泄漏
2019-04-30
libuv实现ping包发送和接收
2019-04-30
基础架构系列篇-CENTOS7安装NGINX
2019-04-30
基础架构系列篇-系统centos7安装docker+COMPOSE
2019-04-30
基础架构系列篇-系统centos7中docker安装rabbitmq
2019-04-30
基础架构系列篇-NGINX部署VUE
2019-04-30
个人电商项目,基于uni-app+ springcloud +VUE技术
2019-04-30
基础架构系列篇-系统centos7安装kafka
2019-04-30
基础架构系列篇-系统centos7中docker安装分布式文件存储服务minio
2019-04-30