test测试命令

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

格式:test 测试条件

如果结果是对的,也叫结果为真,用$?=0表示,反之为假,用非0表示

数值比较

参数

说明

示例

-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:比较大小

[root@xuegod63 ~]# cat test1.sh

#!/bin/bash
if test 2 -eq 1  ; then
        echo ok
else
        echo err
fi
 
if [ 2 -eq 2 ]  ; then
        echo ok
else
        echo err
fi

例2: 比较整数大小

[root@xuegod63 ~]# cat test2.sh

#!/bin/bash
read -p "input var1 var2:" var1 var2
if [ $var1 -gt $var2  ] ;  then
     echo "$var1 > $var2"
elif [ $var1 -lt $var2 ] ; then
     echo "$var1 < $var2"
else
     echo "$var1 = $var2"
fi

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

字符串比较

参数.

说明

示例

==

等于则为真

[ “$a” == “$b” ]

!=

不相等则为真

[ “$a” != “$b” ]

-z 字符串.

字符串的长度为零则为真

[ -z “$a” ]

-n 字符串

字符串的长度不为空则为真

[ -n “$a” ]

str1 > str2

str1大于str2为真

[ str1 \> str2 ]

str1 < str2

str1小于str2为真

[ str1 \< str2 ]

例1:根据用户名判断是否是超级管理员

[root@xuegod63 ~]# cat test3.sh

#!/bin/bash
read -p  "input your name: " name
if [ $name == "root" ] ; then
        echo "you are super administrator"
else
        echo  "You are a general user"
fi

[root@xuegod63 ~]# bash test3.sh

input your name: root

you are super administrator

[root@xuegod63 ~]# bash test3.sh

input your name: mk

You are a general usero "You are a general user"

 

例2:在做字符串大小比较的时候,注意字符串的顺序

  • 大于号和小于号必须转义,要不然SHELL会把它当成重定向符号

  • 大于和小于它们的顺序和sort排序是不一样的

  • 在test比较测试中,它使用的是ASCII顺序,大写字母是小于小写字母的;sort刚好相反

 

扩展: ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

image.png

[root@xuegod63 ~]# cat test4.sh

#!/bin/bash
var1=test
var2=Test
if [  $var1 \>  $var2  ] ; then
        echo "$var1 > $var2"
else
        echo "$var1 < $var2"
fi

[root@xuegod63 ~]# bash test4.sh

test > Test

 文件比较

参数

.说明

示例

-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 ]

例1:

[root@xuegod63 ~]# vim  test5.sh

#!/bin/bash
if [ -e /etc/passwd ] ; then
        echo ok
else
        echo err
fi

[root@xuegod63 ~]# bash test5.sh

ok

 

例2:

[root@xuegod63 ~]# test -e /etc/aaa.txt && echo ok || echo err

err

[root@xuegod63 ~]# test -e /etc/passwd && echo ok || echo err

ok

[root@xuegod63 ~]# test -e /etc && echo ok || echo err

ok

 

例:清空日志目录

[root@xuegod63 ~]# cat clear-log.sh

#!/bin/bash
# clear /var/log/messages
 
#确定当前是root用户
if [ $USER != "root" ];then
    echo "你必须使用root用户才能执行脚本"
    exit 10    #直接退出,并返回10
fi
 
#判断文件是否存在
if [ ! -f /var/log/messages ];then
    echo "文件不存在"
    exit 12
fi
 
#保留最近100行的日志内容
tail -100 /var/log/messages > /var/log/mesg.tmp
 
#日志清理
>/var/log/messages
#cat /dev/null > /var/log/messages
 
mv /var/log/mesg.tmp /var/log/messages
echo "Logs clean up"

注:退出码 exit ,取值范围是0-255

例: exit 退出bash,并返回一个值

[root@xuegod63 ~]# ssh 192.168.1.63

[email protected]'s password: 123456

Last login: Mon May 28 20:37:41 2018 from xuegod63.cn

[root@xuegod63 ~]#

[root@xuegod63 ~]# exit 10

登出

Connection to 192.168.1.63 closed.

[root@xuegod63 ~]# echo $?

10

 

版权声明:
作者:WaterBear
链接:https://l-t.top/1598.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>