bash shell中测试命令

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

1    test 命令的基本格式

    test        condition

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

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

        if     test     condition

        then

commands

        fi

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

[root@local data]# 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@localdata]# cattestfile_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布尔运算符来组合两个条件。如果任意条件为TRUEthen部分的命令就会执行。

[root@localdata]# catcompund_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部分的命令。

bash shell中测试命令的更多相关文章

  1. Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义

    http://hi.baidu.com/lolorosa/blog/item/5775a608bd670d33b0351da7.html $# 是传给脚本的参数个数 $@ 是传给脚本的所有参数的列表 ...

  2. Bash Shell中Shift用法分享

    这篇文章主要介绍了Bash Shell中Shift的使用方法,需要的朋友可以参考下 shift可以用来向左移动位置参数.Shell的名字 $0第一个参数 $1第二个参数 $2第n个参数 $n所有参数 ...

  3. Bash Shell中的特殊位置变量及其应用

    Bash Shell中的特殊位置变量及其应用 众所周知bash shell中有许多特殊的位置变量,灵活使用它们可以更好地发挥Shell脚本的功用. 即位置变量:$1,$2,...来表示,用于让脚本在脚 ...

  4. linux bash shell中case语句的实例

    本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...

  5. 【转】Bash Shell中命令行选项/参数处理

    原文网址:http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash ...

  6. Bash Shell中命令行选项/参数处理

    0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: 如下一个命令行: ./test.sh -f config.conf -v --prefix=/home ...

  7. 26 bash shell中的信号

    当没有任何捕获时,一个交互式 Bash Shell 会忽略 SIGTERM(发送到进程的 TERM 信号用于要求进程终止) 和 SIGQUIT(当用户要求进程执行 core dump 时,QUIT 信 ...

  8. My way on Linux - [Shell基础] - Bash Shell中判断文件、目录是否存在或者判断其是否具有某类属性(权限)的常用方法

    Conditional Logic on Files # 判断文件是否存在及文件类型 -a file exists. #文件存在 -b file exists and is a block speci ...

  9. bash Shell 中如何实现条件判断之if判断

    http://blog.51cto.com/lovelace/1211353 bash中如何实现条件判断?条件测试类型:    整数测试    字符测试    文件测试 一.条件测试的表达式:     ...

随机推荐

  1. CSS3学习笔记(4)-CSS3函数

    p{ font-size: 15px; text-indent: 2em; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid ...

  2. 【微信开发】PHP中奖概率经典算法实例

    $arr=array("50","30","20"); //这里简单列出三个数 $pro = array_sum($arr); // 概率数 ...

  3. Android中的java层的线程暂停和恢复实现

    /**  * 基础线程对象.  *  * @author jevan  * @version (1.0 at 2013-6-17)  * @version (1.1 at 2013-7-2) 增加on ...

  4. Hibernate基础学习(七)—检索方式

    一.概述      Hibernate有五种检索方式. 1.导航对象图检索方式      根据已经加载的对象,导航到其他对象. Order order = (Order)session.get(Ord ...

  5. Java关于e.printStackTrace()介绍

    public void printStackTrace()将此 throwable 及其追踪输出至标准错误流.此方法将此 Throwable 对象的堆栈跟踪输出至错误输出流,作为字段 System.e ...

  6. mysqldumpslow的使用简介

    mysqldumpslow的使用:比如我们要查询按时间返回前5条日志信息,格式如下:mysqldumpslow -s t -t 5 /var/log/mysql/slowquery_20170303. ...

  7. lua 运算符

    lua 运算符 算术运算符 操作符 描述 + 加 - 减 * 乘 / 除 % 求模 ^ 求幂 示例程序 local a, b = 1, 2 print(a + b) print(a - b) prin ...

  8. 使用charles抓取htpps的方法

    自己整理的步骤做个记录 1.下载证书,官方地址:http://www.charlesproxy.com/ssl.zip 可直接点击链接下载:http://charlesproxy.com/getssl ...

  9. Java匿名内部类使用与示例

    首先说为什么有匿名类 两个原因(产生的使命) 1.简化代码编写 某种情况下,类只需要扩展一个方法,没必要为了一个方法单独去写一个子类,然后然后调用子类,此时需要匿名类 2.在不同的包内的类内调用类的p ...

  10. PHP 分支与循环

    一.概述: 上面一章我们讲解了PHP当中的运算符和表达式,通过上面的知识点我们就可以完成一些基本的运算操作了.但是涉及到一些比较复杂的逻辑,分支与循环就必不可少了.通过分支和循环的结合使用可以使业务更 ...