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
下一篇 2017-04-16

相关推荐

  • N25第五周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; ]# grep -E '^[[:space:]]+.*' /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;…

    Linux干货 2017-01-08
  • N26—第二周博客作业

    一、Linux常用管理命令     1、cp命令:复制         cp 源文件 目标文件 [root@localhost ~]# cp /etc/fstab /tmp cp: overwrite&nbsp…

    Linux干货 2017-01-06
  • nginx基本功能学习

    一、NGINX介绍: Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性:            作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 …

    Linux干货 2015-12-19
  • 配置逻辑卷·设定LVM快照·btrfs文件系统

    _ueditor_page_break_tag_ 配置逻辑卷,设定LVM快照,btrfs文件系统                 逻辑卷管理器( LVM)v允许对卷进行方便操作的抽象层,包括重新设定文…

    Linux干货 2016-09-01
  • N25第五周 grep 和find 命令使用示例

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;    [root@localhost grub]# grep "^[[:space:]]\+.*" grub.conf    root (hd0,0)…

    Linux干货 2016-12-25
  • 运筹帷幄之中,决胜与千里之外!

           运筹帷幄之中,决胜与千里之外,决定改变一生。        自从2016年年后学校要求产参加毕业实习,但对linux一窍不通的我,阴差阳错的被一家网络公司给录取了。        安排在一家企业做驻场运维工程师,刚去驻场的时候并没有给我分配相应的工作只是给了一些关于数据库,网络,和系统的一些资料,要求进行自学。我想了想,就决定选择了系统进行了解…

    2018-03-26