shell 之 test测试命令

1. test命令初识

1.1 定义

shell中的test命令用于检查某个条件是否成立,它可以进行数值字符文件三个方面的测试

1.2 语法格式

test 测试条件

[ 测试条件 ]

注:[] 里的测试条件[]符号之间均有空格
注:如果结果是对的,也叫结果为真,用$?=0表示,反之为假,用非0表示

2. test测试命令

2.1 数值比较

参数说明示例
-eq等于则为真["$a" -eq "$b"]
-ne不等于则为真["$a" -ne "$b"]
-gt大于则为真["$a" -gt "$b"]
-ge大于等于则为真["$a" -ge "$b"]
-lt小于则为真["$a" -lt "$b"]
-le小于等于则为真["$a" -le "$b"]

注意:在做数值比较时,只能用整数

1)例1

比较 2是否等于1;2是否等于2

#!/bin/bash
# 通过test命令比较大小
if test 2 -eq 1; then
	echo "OK"
else
	echo "ERROR"
fi

# 通过[ 表达式 ]来比较大小,效果同test
if [ 2 -eq 2 ]; then
	echo "OK"
else
	echo "ERR"
fi

执行结果
在这里插入图片描述
注意:[ 表达式 ]表达式和左右两个中括号符号是有空格隔开的

2)例2

#!/bin/bash
read -p "input your num1,num2:" num1 num2
if [ $num1 -gt $num2 ]; then
	echo "$num1 大于 $num2"
elif [ $num1 -lt $num2 ]; then
	echo "$num1 小于 $num2"
else
	echo "$num1 等于 $num2"
fi

执行结果:
在这里插入图片描述

2.2 字符串比较

参数说明示例
==等于则为真[ "$a" == "$b" ]
!=不相等则为真[ "$a" != "$b" ]
-z 字符串字符串的长度为零则为真[ -z "$a" ]
-n 字符串字符串的长度不为空则为真[ -n "$a" ]
str1 > str2str1大于str2为真[ str1 \> str2 ]
str1 < str2str1小于str2为真[ str1 \< str2 ]

1)例1

等于号 == 的测试

#!/bin/bash
read -p "input the user:" uname
if [ $uname == "root" ]; then
	echo "you are the super administrator"
elif [ $uname == "mlg" ]; then
	echo "you are general user"
else
	echo "there is no user named $uname"
fi

执行结果:
在这里插入图片描述

2)例2

:在做字符串大小比较的时候,注意字符串的顺序:
  a)大于号和小于号必须转义,否则SHELL会把它当作重定向符号
  b)大于和小于他们的顺序和sort排序是不一样
  c)在test比较测试中,它使用的是ASCII码,大写字母是小于小写字母的;sort排序刚好相反

#!/bin/bash
str1="test"
str2="Test"

if [ $str1 \< $str2 ]; then
	echo "$str1 < $str2"
else
	echo "$str1 > $str2"
fi 

执行结果
在这里插入图片描述

#!/bin/bash
str1="test"
str2="Test"

if [ $str1 \> $str2 ]; then
	echo "$str1 < $str2"
else
	echo "$str1 > $str2"
fi 

执行结果
在这里插入图片描述

3)ASCII码相关

参考 python的字符编码博客:
https://blog.csdn.net/qq_31851107/article/details/100514391

2.3 文件比较

参数说明示例
-e 文件名如果文件或目录存在则为真(exist)[ -e file ]
-r 文件名如果文件存在且可读则为真(read)[ -r file ]
-w 文件名如果文件存在且可写则为真(write)[ -w file ]
-x 文件名如果文件存在且可执行则为真(x)[ -x file ]
-s 文件名如果文件存在且至少有一个字符则为真(size),即非空文件[ -s file ]
-d 文件名如果文件存在且为目录则为真(directory)[ -d file ]
-f 文件名如果文件存在且为普通文件则为真(file)[ -f file ]
-c 文件名如果文件存在且为字符型文件则为真(character)[ -c file ]
-b 文件名如果文件存在且为特殊块文件则为真(block)[ -b file ]
file1 -nt file2检查file1是否比file2新(new),比较时间戳[ file1 -nt file2 ]
file1 -ot file2检查file1是否比file2旧(old),比较时间戳[ file1 -ot file2 ]

1)例1

判断是否存在/etc/passwd文件

#!/bin/bash
# 判断/etc/passwd文件是否存在

if [ -e /etc/passwd ]; then
	echo there is a file /etc/passwd
else
	echo no file named passwd
fi

执行结果:
在这里插入图片描述
精简版

test -e /etc/passwd && echo ok || echo error

在这里插入图片描述

2)例2

清空/var/log/messages 文件,仅保留最近一百行记录

#!/bin/bash
# 清除/var/log/message日志并保存最新100行日志

# 确定当前是root用户,否则退出并返回10
if [ $USER != "root" ]; then
	echo "非root用户,无权清除日志,退出"
	exit 10
fi
# 是否存在该文件,否则退出并返回12
if [ ! -f /var/log/messages ]; then
	echo "不存在该文件,退出"
	exit 12
fi

# 保留最近100行记录(将最近100行记录写入临时文件)
tail -100 /var/log/messages > /var/log/messages.tmp

# 清理原日志
> /var/log/messages
# cat /dev/null > /var/log/messages

# 重命名临时文件(即仅保留了最近100行记录)
mv /var/log/messages.tmp /var/log/messages

echo "清理完毕!"

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值