shell中测试命令

shell中测试命令

       test命令提供了if–than语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态吗0 。这样if–than语句就与其他编程语言中的if–than语句类似的方式工作了。如果条件不成立,test命令就会退出并返回非零的退出状态码,使得if–than语句不会被执行。

1  test 命令的基本格式                            

       test         condition

              condition是test命令要测试的一系列参数和值。

2 用在if-than语句中,格式是这样的:                    

              if    test        condition

              then

                     commands

              fi

       如果不写condition部分,它会以非零的退出状态码退出。then 语句块不会被执行,并执行else语句块。

cat test6.sh

#!/bin/bash

#

if     test

then

       echo
“No expressing  returns a Ture”

else

       echo
“No expressing returens a False”

fi

[root@local data]# bash test6.sh

       “No expressing returens
a False”

3  在bash shell中的另一种常用的测试条件                 

       if     [      condition              ]

       then

              commands

       fi

       方括号定义了测试条件。

       test命令可以判断三类条件:

       (1)数值比较

         (2)字符串比较

         (3)文件比较

注意:方括号之后和第二个方括号之前必须加上一个空格,否则会报错。

4    数值比较                                  

         下表列出了测试两个值时可用的条件参数

比较

描述

 n1  –eq   n2

检查n1是否等于n2

n1  –ge  n2

检查n1是否大于或等于n2

n1  –gt  n2

检查n1是否大于n2

n1  –le  n2

检查是否小于等于n2

n1  –lt  n2

检查n1是否小于n2

 n1  –ne  n2

检查n1是否不等于n2

注意:测试命令中只能处理整数

[root@local data]# cat number_test.sh

#!/bin/bash

value1=10 #定义变量value1、value2

value2=11

if [ $value1 -gt 5 ] #测试value1的值是否大于5

then

       echo
“The test value $value1 is greater than 5”

fi

if [ $value1 -eq $value2 ]            #测试value1的值是否和变量value2的值相等。

then

       echo
“The values are equal”

else

       echo
“The values are different”

fi

[root@local
data]# bash number_test.sh

The test
value 10 is greater than 5

The values
are different

5    字符串比较                                

         条件测试运行字符串比较,下表列出了字符串附加测试

比较

描述

str1 = str2

检查str1是否和str2 相同

str1 != str2

检查str1是否和str2不同

str1 < str2

检查str1 是否比str2小

str1 > str2

检查str1 是否比str2大

–n  str1

检查str1的长度是否非0

–z  str1

检查str1的长度是否为0

         要测试一个字符串是否比另一个字符串大是一个麻烦的问题,主要有一下两个问题:

(1)大于号和小于号必须转义,否则SHELL会把它们当做重定向符号,把字符串值当作文件名;

(2)大于和小于顺序和sort命令所采用的不同。

在字符串比较测试中,大写字母被认为是大于小写字母的;比较测试中使用的是标准的ASCII顺序,根据每个字符的ASCII数值来决定排序结果。

[root@local data]# cat str_comparison.sh

#!/bin/bash

var1=baseball

var2=hockey

if [ $var1 \> $var2 ]

then

       echo
“$var1 is greater than $var2”

else

       echo
“$var1 is lees than $var2”

fi

 

[root@local
data]# bash str_comparison.sh

baseball
is lees than hockey

6    文件比较                                  

         测试Linux上文件系统上文件和目录的状态。

比较

描述

–d  file

检查file 是否存在并是一个目录

–e  file

检查file是否存在

–f  file

检查file是否存在并是一个文件

–r  file

检查file是否存在并可读

–s  file

检查file是否存在并非空

–w  file

检查file是否存在并可写

–x  file

检查file是否存在并可执行

–O  file

检查file是否并属当前用户所有

–G  file

检查file 是否存在且默认组与当前用户相同

file1 –nt  file2

检查file1是否比file2新

file1 –ot  file2

检查file1是否比file2旧

 

[root@local data]# cat testfile_exist.sh

#!/bin/bash

item_name=$HOME

echo

echo “The item being checked:$item_name”

echo

if [ -e $item_name ]

then #item_name does exist

       echo
“The item,$item_name,does exist”

       echo
“But is it a file?”

       echo

  
if [ -f  $item_name ]

  
then #item_name is a file

       echo
“Yes,$item_name is a file”

  
else #item_name is not a file

       echo
“No,$item_name is not a file”

  
fi

else #item_name does not exist

       echo
“The item,$item_name, does not exist”

       echo
“Nothing to update”

fi

 [root@local
data]# bash testfile_exist.sh

The item
being checked:/root

The item,/root,does
exist

But is
it a file?

No,/root
is not a file

 

7    复合条件                                 

if–than语句中可以使用布尔逻辑来组合测试

(1) [ condition1 ]  && 
[
condition2 ]

(2) [ conditon1 ]  ||  [ conditon2 ]

         第一种布尔运算使用AND布尔运算符来组合两个条件。要让then 部分的命令执行,两个条件必须都满足。

         第二种布尔运算使用OR布尔运算符来组合两个条件。如果任意条件为TRUE,then部分的命令就会执行。

[root@local data]# cat compund_comparison.sh

#!/bin/bash

#

if [ -d $HOME ] && [ -w $HOME/testing
]

then

       echo
“The file exists and you can write to it”

else

       echo
“I can not write to the file”

fi

 [root@local data]# bash compund_comparison.sh

I can
not write to the file

         第一个比较会检查用户的$HOME目录是否存在。第二个比较会检查在用户的$HOME目录下是否有个叫做testing 的文件,以及用户是否有该文件的写入权限。如果两个比较中有一个失败了,if语句就会失败,shell就会执行else的部分。如果两个条件都通过了,则if语句通过,shell会执行then部分的命令。

 

原创文章,作者:linux is not unix,如若转载,请注明出处:http://www.178linux.com/73459

赞 (0)
linux is not unixlinux is not unix
上一篇 2017-04-16 18:43
下一篇 2017-04-16 18:47

相关推荐

  • OPenSSL

    OPenSSL   OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用.   SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。…

    Linux干货 2016-11-07
  • Linux磁盘管理与文件系统

        本篇内容如下:             1、硬盘结构             2…

    Linux干货 2016-08-29
  • javascript快速入门

    标识符多了一个美元符号python中只有字母和下划线和数字,数字不能开头数据类型有number(整形和浮点型),boolean,string,null,undefined(声明未赋值),symbol(新引入),object类型(基本类型和特殊类型外的其他类型) 引入一个变量要先申明,var a,let b常量类型,声明时定义,python中不存在const …

    Linux干货 2018-01-15
  • 从需求和安全角度开始linux(一)-20151211

    突然想从需求和安全的角度来展开各种命令。因为我觉得linux中所有的常用命令基本都是需求和安全的产物。 当我打开一个CLI(command line interface)界面的linux操作系统时: 一、我希望能够看到里面有什么,因此有了ls的命令。      ls – list&nbs…

    Linux干货 2015-12-15
  • 基于Keepalived+Nginx实现高可用负载均衡

    练习贴,测试keepalived+lvs_dr高可用负载均衡

    2017-12-11
  • CentOS 6.5 LVM磁盘管理学习笔记

    在系统运维和服务器管理过程中,经常遇到服务器磁盘容量不足,需要在线扩容的情况。普通磁盘分区的管理方式在逻辑分区划好之后就无法改变其大小。而LVM可以实现Linux服务器下面磁盘空间的在线扩容和动态管理,相对于普通的磁盘分区有很大的灵活性。一、LVM简介    LVM是 Logical VolumeManager(逻辑卷管理)的简…

    Linux干货 2016-08-29