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. 老李分享:大数据框架Hadoop和Spark的异同 2

    Spark数据处理速度秒杀MapReduce Spark因为其处理数据的方式不一样,会比MapReduce快上很多.MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果 ...

  2. Android中那些有你不知道的事

    在安卓开发中,总有那么一些看似简单,实则绊脚的难题,等你去探索,等你去解决,也许你已经遇见了解决了,也许你还没碰上,写下这篇总结,希望能帮助那行即将遇到的朋友,快速解决这些小问题! 一.activit ...

  3. Java排序算法之堆排序

    堆的概念: 堆是一种完全二叉树,非叶子结点 i 要满足key[i]>key[i+1]&&key[i]>key[i+2](最大堆) 或者 key[i]<key[i+1] ...

  4. 微信端解决a标签链接 失效的问题

    最近常碰到这个问题就是 在微信端点击a标签链接的时候,第一次正常界面跳转.但是,界面重新跳转回来再次点击a标签的话 .出现 界面不跳转,但是进度条加载完毕,点击多次页面无法跳转. 解决办法 在链接后边 ...

  5. Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

    转载:王文松的博客Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解 安装环境       Linux版本:Ubuntu 12.04    内核版本:Linux 3.5.0 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合优化篇(八)代码优化整理小记及个人吐槽

    日常啰嗦 这两天也一直在纠结这一篇文章该写什么东西,前面临时加的两篇文章就有些打乱了整体节奏,这一篇又想去写一下代码层面优化的事情,可是也不太能抓住重要的点,不太确定从何入手,因为这件事情牵涉了太多技 ...

  7. 多云时代,海外微软Azure云与国内阿里云专线打通性能测试

    本文地址:http://www.cnblogs.com/taosha/p/6528730.html 在云计算的大时代,大型客户都有业务全球拓展的需求,考虑到成本,时间因素,一般都是选择云计算,现在云计 ...

  8. 如何选择合适的PHP开发框架

    PHP作为一门成熟的WEB应用开发语言,已经深受广大开发者的青睐.与此同时,各式各样的PHP开发框架也从出不穷,面对如此多而且良莠不齐的开发框架,开发者们想必都会眼花缭乱,不知道该选择用哪个.其实并没 ...

  9. oh-my-zsh 安装和使用

    oh-my-zsh是github用户robbyrussell的一款为简化zsh配置而开发的开源项目. 其github地址:https://github.com/robbyrussell/oh-my-z ...

  10. sql server 2008 数据库管理系统使用SQL语句创建登录用户详细步骤

    --服务器角色:--固定服务器角色具有一组固定的权限,并且适用于整个服务器范围. 它们专门用于管理 SQL Server,且不能更改分配给它们的权限. --可以在数据库中不存在用户帐户的情况下向固定服 ...