shell中测试命令

shell中测试命令

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

1  test 命令的基本格式                            

       test         condition

              conditiontest命令要测试的一系列参数和值。

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 #定义变量value1value2

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    复合条件                                 

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

1 [ condition1 ]  && 
[
condition2 ]

2 [ conditon1 ]  ||  [ conditon2 ]

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

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

[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

相关推荐

  • 在vsftp中实现基于pam_mysql的虚拟用户机制

    FTP简介 在介绍vsftp相关内容前,简单描述下FTP。FTP全称File Transfer Protocol,文件传输协议。它是一个C/S架构的协议,在Linux中其服务端实现主要有vsftpd,pureftpd,proftpd,Filezilla,本文主要介绍的是vsftp。客户端实现主要是ftp和lftp两种工具。其工作方式:主要分为两个层面的连接:…

    Linux干货 2017-01-07
  • 文件系统管理_设定文件系统的配额

    认识配置配额系统 :为控制用户使用的空间的大小,在linux可以实现对分区的大小控制,控制用户在这个分区内使用空间的大小同时还可以对用户的文件个数实现控制。 在linux系统中其遵循文件分区来实现控制 磁盘的配额只针对单个分区来实现控制,不能对单块磁盘(硬盘)来实现控制的 【搭建试验环境 1】 怎样把某一个文件夹(/home)单独放到(迁移)一个独立的分区中…

    Linux干货 2017-04-24
  • Bash 的配置文件

    有时候,在定义了别名 alilas cls=clear  , 或者定义了 umask=033 等等,在logout 用户后再登录,会失效,因为这些本地变量,仅对当前shell生效。而要保留配置,使其永久生效,就需要将这些定义的写入配置文件中保存。下面介绍下bash的配置文件:  Bash的配置文件可以分为: profile类: /etc/…

    Linux干货 2015-04-04
  • shell脚本编写-1练习题

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin/bash echo “the hostname is:`hostname`” echo “the ip address is:`ifconfig | sed –n ‘2p’ |sed…

    Linux干货 2016-08-15
  • vim编辑以及脚本编程练习

    vim编辑器的使用总结: vim在工作过程当中有三种模式:编辑模式、输入模式、末行模式。 1、编辑模式:即命令模式,键盘操作常被理解为编辑命令; 2、输入模式:在文本文件当中进行输入内容; 3、末行模式:vim内置的命令行接口,执行vim的内置命令。   vim的使用 打开文件 #vim[option]…[FILE] +#:打开文件后,直接让光标处…

    Linux干货 2017-10-29
  • 纯文本配置还是注册表

    我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:一,二),这个最重要的Unix文化(参看Unix传奇下篇)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是Windows的编程中那“强大”的…

    Linux干货 2016-08-15