shell test命令 和 [ 是同一个命令的不同名称。

原文:http://www.cnblogs.com/Jeff-Tang/p/5776947.html

----------------------------------------------------------------------------------------------------------

test 命令最短的定义可能是评估一个表达式;如果条件为真,则返回一个 0 值。如果表达式不为真,则返回一个大于 0 的值 — 也可以将其称为假值。检查最后所执行命令的状态的最简便方法是使用 $? 值。出于演示的目的,本文中的例子全部使用了这个参数。

test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空。这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误。

  当试图保护脚本时,您可以通过将所有参数包含在双引号中来解决这个问题。然后 shell 将变量展开,如果变量没有值,那么将传递一个空值给 test。另一种方法是在脚本内增加一个额外检查过程来判断是否设置了命令行参数。如果没有设置命令行参数,那么脚本会告诉用户缺少参数,然后退出。我们会通过一些例子来更具体地说明所有这些内容。

  test 和 [ 命令

  虽然 Linux 和 UNIX 的每个版本中都包含 test 命令,但该命令有一个更常用的别名 — 左方括号:[。test 及其别名通常都可以在 /usr/bin 或 /bin (取决于操作系统版本和供应商)中找到。

  当您使用左方括号而非 test 时,其后必须始终跟着一个空格、要评估的条件、一个空格和右方括号。右方括号不是任何东西的别名,而是表示所需评估参数的结束。条件两边的空格是必需的,这表示要调用 test,以区别于同样经常使用方括号的字符/模式匹配操作。

  test 和 [ 的语法如下:

  test expression

  [ expression ]

  在这两种情况下,test 都评估一个表达式,然后返回真或假。如果它和 if、while 或 until 命令结合使用,则您可以对程序流进行广泛的控制。不过,您无需将 test 命令与任何其它结构一起使用;您可以从命令行直接运行它来检查几乎任何东西的状态。

  因为它们彼此互为别名,所以使用 test 或 [ 均需要一个表达式。表达式一般是文本、数字或文件和目录属性的比较,并且可以包含变量、常量和运算符。运算符可以是字符串运算符、整数运算符、文件运算符或布尔运算符 — 我们将在以下各部分依次介绍每一种运算符。

test命令用法。功能:检查文件和比较值
  1)判断表达式
  if test  (表达式为真)
  if test !表达式为假
  test 表达式1 –a 表达式2                  两个表达式都为真
  test 表达式1 –o 表达式2                 两个表达式有一个为真
  2)判断字符串
  test –n 字符串                                   字符串的长度非零
  test –z 字符串                                    字符串的长度为零
  test 字符串1=字符串2                    字符串相等
  test 字符串1!=字符串2               字符串不等
  3)判断整数
  test 整数1 –eq 整数2                        整数相等
  test 整数1 –ge 整数2                        整数1大于等于整数2
  test 整数1 –gt 整数2                         整数1大于整数2
  test 整数1 –le 整数2                         整数1小于等于整数2
  test 整数1 –lt 整数2                          整数1小于整数2
  test 整数1 –ne 整数2                        整数1不等于整数2
  4)判断文件
  test  File1 –ef  File2        两个文件具有同样的设备号和i结点号
  test  File1 –nt  File2        文件1比文件2 新
  test  File1 –ot  File2        文件1比文件2 旧
  test –b File        文件存在并且是块设备文件
  test –c File        文件存在并且是字符设备文件
  test –d File        文件存在并且是目录
  test –e File        文件存在
  test –f File         文件存在并且是正规文件
  test –g File        文件存在并且是设置了组ID
  test –G File        文件存在并且属于有效组ID
  test –h File        文件存在并且是一个符号链接(同-L)
  test –k File        文件存在并且设置了sticky位
  test –b File        文件存在并且是块设备文件
  test –L File        文件存在并且是一个符号链接(同-h)
  test –o File        文件存在并且属于有效用户ID
  test –p File        文件存在并且是一个命名管道
  test –r File        文件存在并且可读
  test –s File        文件存在并且是一个套接字
  test –t FD        文件描述符是在一个终端打开的
  test –u File        文件存在并且设置了它的set-user-id位
  test –w File        文件存在并且可写
  test –x File        文件存在并且可执行
  每一种条件语句的基础都是判断什么是真什么是假。是否了解其工作原理将决定您编写的是质量一般的脚本还是您将引以为荣的脚本。
  Shell 脚本的能力时常被低估,但实际上其能力的发挥受制于脚本撰写者的能力。您了解得越多,您就越能像变戏法似地撰写一个文件来使任务自动化和简化您的管理工作。
例1.比较两个数大小

#/bin/bash
echo “please enter two number”
read a
read b
if test $a -eq $b
then echo “NO.1 = NO.2″
elif test $a -gt $b
then echo “NO.1 > NO.2″
else echo “NO.1 < NO.2″
fi
例2.查找/root/目录下是否存在该文件
#/bin/bash
echo “enter a file name:”
read a
if test  -e /root/$a
then echo “the file is exist!”
else echo “the file is not exist!”
fi

linux中shell命令test用法和举例的更多相关文章

  1. 【转载】linux中shell命令test用法和举例

    test 命令最短的定义可能是评估一个表达式:如果条件为真,则返回一个 0 值.如果表达式不为真,则返回一个大于 0 的值 — 也可以将其称为假值.检查最后所执行命令的状态的最简便方法是使用 $? 值 ...

  2. Linux中shell命令的用法和技巧

    使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧.当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务.于是,我开始在一个文本文件里记录这些用法,并 ...

  3. linux 中的命令是什么?执行命令的几种方式?如何自己创建命令?

    linux 中的命令是什么? 命令是可执行的二进制程序 执行命令的几种方式? ./test.sh                     #相对路径执行 /data/test.sh           ...

  4. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  5. Linux中exec命令相关

    Linux中exec命令相关 exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. b ...

  6. Python下调用Linux的Shell命令

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何调用Linux的Shell命令?下面来介绍几种常用的方法: 1. os 模块 ...

  7. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释 linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID ...

  8. loadrunner调用plink,远程linux执行shell命令

    loadrunner调用plink,远程linux执行shell命令   脚本: Action() {   char* cmd; cmd = lr_eval_string("C:\\\&qu ...

  9. linux中查找命令find、locate、whereis、which、type区别

    linux中查找命令find.locate.whereis.which.type区别 1. find Java代码 find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件.与查询数据库(/ ...

随机推荐

  1. Akka源码分析-Cluster-ActorSystem

    前面几篇博客,我们依次介绍了local和remote的一些内容,其实再分析cluster就会简单很多,后面关于cluster的源码分析,能够省略的地方,就不再贴源码而是一句话带过了,如果有不理解的地方 ...

  2. asp.net MVC 给Controler传一个JSon集合,后台通过List<Model>接收

    需求情景 View层经常需要通过Ajax像后台发送一个json对象的集合,但是在后台通过List<Model>无法接收,最后只能通过妥协的方式,在后台获取一个json的字符串,然后通过Js ...

  3. Echarts 出现不明竖线解决方案

    Echarts出现了不明竖线,百思不得其解.去查相应的解决方案也没有找到. 后来自己点来点去,突然感觉像是上一个Echarts遗留的. 然后去Echarts官网看到了 clear()方法,这个方法可以 ...

  4. 学习笔记-java IO流总结 转载

    1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列.Java的I/O流提供了读 ...

  5. JS中for循环多个变量的判断原理

    看完下面两个例子的比较就明白了,其实就是逗号表达式,总是依据最后一个表达式的值. for(i=0, j=0; i<10, j<6; i++, j++){ k = i + j; consol ...

  6. 2015.12.25-2016.01.01 大论文迭代B

    大论文B轮迭代,稍重前端 12.25 周五,完善摘要 12.26 周六,完善第一章 12.27 周天,完善第二章 12.28 周一,完善第三章 12.29 周二,完善第四章 12.30 周三,完善第五 ...

  7. Python 之web动态服务器

    webServer.py代码如下: import socket import sys from multiprocessing import Process class WSGIServer(obje ...

  8. 基于python xlsxwriter、xlrd 生成测试报告

    import xlsxwriter,xlrd ''' 思路: 1.获取数据 2.整合数据 3.写入文件 ''' #筛选 def filt(category,table,filt_name=None,r ...

  9. $.extend 合并对象(处理可传入0个或多个参数)

    function test(options){             $.extend({ },this.Default,options);                  var v = thi ...

  10. NGINX+PHP-FPM7 FastCGI sent in stderr: “Primary script unknown”

    https://www.cnblogs.com/hjqjk/p/5651275.html 一开始是Nginx打开网页显示一直是拒绝访问.查看nginx日志是报错显示我的题目,然后就各种搜索解决啊! 百 ...