1、test测试命令
判断命令test一般用于脚本当中,可以简写为中括号[ ]。其会对跟随的条件进行判断,一般可以分为数值判断、字符串判断和文件判断。语法格式为test [ 判断条件 ],注意中括号[ ]与判断条件之间必须存在空格,还需注意判断条件的判断符号与比较值之间也需要存在空格。
如果是test单独使用,如果判断条件为真,那么echo $?会返回0,判断条件为假返回1。
(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” ]
[root@test ~]# [ 2 -gt 5 ] && echo "ok" || echo "error"
error
Eg:比较两个数字大小
[root@test ~]# vi test.sh
#!/bin/bash
read -p "输入num1:" a
read -p "输入num2:" b
if [ $a -eq $b ]
then
echo "$a等于$b"
else
echo "$a不等于$b"
fi
[root@test ~]# sh test.sh
输入num1:1
输入num2:2
1不等于2
[root@test ~]#
(2)字符串比较
参数 说明 示例
== 等于则为真 [ “$a” == “$b” ]
!= 不相等则为真 [ “$a” != “$b” ]
-z 字符串 字符串的长度为零则为真 [ -z “$a” ]
-n 字符串 字符串的长度不为空则为真 [ -n “$a” ]
str1 > str2 str1 大于 str2 为真 [ str1 \> str2 ]
str1 < str2 str1 小于 str2 为真 [ str1 \< str2 ]
注:大于号和小于号必须转义,要不然SHELL会把它当成重定向符号;
在test比较测试中,它使用的是ASCII顺序,大写字母是小于小写字母
[root@test ~]# [ n == m ] && echo "ok" || echo "error"
error
[root@test ~]# vi test.sh
#!/bin/bash
read -p "输入字符1:" a
read -p "输入字符2:" b
if [ $a == $b ]
then
echo "$a等于$b"
else
echo "$a不等于$b"
fi
[root@test ~]# sh test.sh
输入字符1:m
输入字符2:m
m等于m
[root@test ~]# sh test.sh
输入字符1:n
输入字符2:m
n不等于m
[root@test ~]#
[root@test ~]# sh test.sh
输入字符1:n
输入字符2:N
n不等于N
[root@test ~]#
(3)文件比较
参数 说明 示例
-e 文件名. 如果文件或目录存在则为真 [ -e file ]
-r 文件名. 如果文件存在且可读则为真 [ -r file ]
-w 文件名. 如果文件存在且可写则为真 [ -w file ]
-x 文件名. 如果文件存在且可执行则为真 [ -x file ]
-s 文件名 如果文件存在且至少有一个字符则为真 [ -s file ]
-d 文件名. 如果文件存在且为目录则为真 [ -d file ]
-f 文件名. 如果文件存在且为普通文件则为真 [ -f file ]
-c 文件名. 如果文件存在且为字符型文件则为真 [ -c file ]
-b 文件名.. 如果文件存在且为块特殊文件则为真 [ -b file ]
file1 -nt fle2 检查 file1是否比file2新 [ file1 -nt file2 ]
file1 -ot file2 检查file1是否比file2旧 [ file1 -ot file2 ]
[root@test ~]# [ -d /etc/passwd ] && echo "是目录" || echo "不是目录"
不是目录
[root@test ~]# test -r /etc/passwd && echo "可读" || echo "不可读"
可读
Eg:情况messages日志
[root@test ~]# vi clean.sh
#!/bin/bash
if [ $USER != "root" ]
then
echo "需要root用户"
exit
fi
if [ ! -f /var/log/messages ]
then
echo "文件不存在"
exit
else
echo " " >/var/log/messages
echo "messages文件存在且已清空"
fi
[root@test ~]# more /var/log/messages
11111
[root@test ~]# sh clean.sh
messages文件存在且已清空
[root@test ~]# more /var/log/messages
[root@test ~]#
个人公众号,微信搜索:linux言叙