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

相关推荐

  • N25-第六周总结 vim编辑器

    vim编辑器:         模式化的编辑器             基本模式:                     编辑模式,命令模式,输入模式,末行模…

    Linux干货 2017-02-15
  • Linux基础知识

    命令的语法通用格式: # COMMAND OPTIONS ARGUMENTS COMMAND:  发起一命令:请求内核将某个二进制程序运行为一个进程; 程序 –> 进程 静态 –> 动态(有生命周期) 命令本身是一个可执行的程序文件:二进制格式的文件,有可能会调用共享库文件; 多数系统程序文件都存放在:/bin,…

    Linux干货 2016-10-29
  • N21沉舟13周作业

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)   1)共享名为shared,工作组为magedu;   2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;   3)添加s…

    Linux干货 2016-10-24
  • 马哥教育网络班21期+第6周课程练习

    请详细总结vim编辑器的使用并完成以下练习题1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s/^([[:space:]]{1,}.*)/#\1/s 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行…

    Linux干货 2016-08-15
  • 第十一周作业

    1、详细描述一次加密通讯的过程,结合图示最佳。   发送者:     1)使用单向加密算法提取要发送文件的特征码;     2)使用自己的私钥加密特征码并附加在数据后面;     3)生成用于对称加密的临时密码;     4)用此临时密钥加密数据和已经使用私钥加密后的特…

    2017-05-08
  • 马哥网络教育班第21期+第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~]# fdisk /dev/sd…

    Linux干货 2016-08-12