shell脚本【命令1】test命令

标签: test linux shell 文件测试命令 字符串比较
17人阅读 评论(0) 收藏 举报
分类:

     ⑴ 首先讲讲介绍它的必要性:

     在任何一种编程语言中,条件测试功能都是必不可少的。条件测试可以控制程序的控制流向和下一步的处理动作。是控制程序逻辑流向一个非常重要的方式。

   而test条件测试语句,以其丰富的条件判断功能,0或1的出口返回状态,使其非常适合应用于条件测试语句。

     ⑵ test命令的作用对象(本篇博客也将从这四个方面进行说明):

         ①文件、

         ②字符串、

         ③整数、

         ④逻辑

     ⑶ test命令的等效方式:[ ]    [[  ]]

    一般是使用[[  ]],因为这样可以避免一些逻辑错误。同时需要注意:[[…]]方括号和中间字符之间一定要有空格

     同时区分[[…]]和((…)),((…))的用法:点击打开链接

    接下来将介绍如何使用及一些选项:

1、文件测试运算符

    文件测试主要指文件的状态和属性测试,可以用于判断一个语句,也可以用来判断两个文件之间修改时间的前后

    ⒈单个文件:

    ⑴ 文件是否存在

        [[ -e file ]]

    ⑵ 文件存在,且可读

        [[ -r file ]]

    ⑶ 文件存在,且可写

        [[ -w file ]]

    ⑷ 文件存在,且可执行

        [[ -x file ]]

    ⑸ 文件存在,且其大小大于0

        [[ -s file ]]

        解析:通过文件大小,判断文件是否为空

    ⑹ 文件存在,且为普通文件(非目录或设备文件)

        [[ -f file ]]

    ⑺ 存在,且是目录

        [[ -d file ]]

    ⑻ 存在,且是符号连接

        [[ -L file ]]

        解析:符号连接(软连接),是指向另一个文件的一个文件。其与目录类似,符号连接也只能包含一种类型的数据。

    ⑼ 存在,且是字符特殊文件(如终端)

        [[ -c file ]]

     ⑽ 存在,且是块特殊文件(如磁盘)

            [[ -b file ]]

    ⑾ 存在,且是命令的管道文件

        [[ -p file ]]

   ⑿ 存在,且设置了setuid标志位

        [[ -u file ]]

    解析:setuid标志位是超级用户为普通用户开通的文件访问权限,使普通用户在执行该文件时有超级用户的特权。

    例如,如果没有系统文件/etc/shadow没有设置setuid标志位,则,普通用户无法用过passwd命令修改密码。

    查看:可以用过ls –l /user/bin/passwd 进行查看是否设置。看输出访问权限字段有没有字符”s“

        Setuid标志位可能造成安全隐患,但,在shell脚本中,setuid标志位没有影响。

    ??是因为关闭脚本时,自动把setuid复位了吗,还是说在脚本中设置的setuid标志位,作用用范围只是脚本的生命周期。

    ⒀ 存在,且设置了setgid标志位

        [[ -g file ]]

        解析:

    ⒁ 存在,且设置了粘性标志位

        [[ -k file ]]

   ⒉ 两个文件:

    ⑴ f1存在,修改时间比f2新

        [[ file1 –nt file2 ]]

    ⑵ f1存在,修改时间比f2早

        [[ file1 –ot file2 ]]

    ⑶ f1、f2均存在,且指向同一个物理文件

        [[ file1 –ef file2 ]]

 

    最后,逻辑非运算符”!“,和上述表达式搭配使用

2、字符串测试运算符

    ⒈单个字符串:

    ⑴ 长度为0

        [[ -z string ]]

    ⑵ 长度大于0

        [[ -n string ]]

   ⒉两个字符串:

    ⑴ 相等

        [[ string1 = string2 ]]

            注意:这个作为字符串相等比较的命令,等号两边必须有空格!!不然会被当做一个字符串。

            举例:

                    ① [[ name=chj ]]           这个出口状态永远为真,因为把它当做一个字符串,非0

                    ② [[ name = chj ]]         这个出口状态为假

    ⑵ 不等

        [[ string1 != string2 ]]

    ⑶ 小于

        [[ string1 < string2 ]]

    注意:如果这里用“[ ]”,则格式为”[ string1 \< string2 ]“,<前需要加转义符号\

    ⑷ 大于

        [[ string1 > string2 ]]

    注意:同3

3、整数测试运算符

    比较前后两个数值的大小

    ⑴ 相等

        [[ exp1 –eq exp2 ]]

    ⑵ 不相等

        [[ exp1 –ne exp2 ]]

    ⑶ exp1 > exp2

        [[ exp1 –gt exp2 ]]

    ⑷ exp1 < exp2

        [[ exp1 –lt exp2 ]]

    ⑸ 大于等于

        [[ exp1 –ge exp2 ]]

    ⑹ 小于等于

        [[ exp1 –le exp2 ]]

 

    举例:

    实现功能:实现1000次hello的输出

    代码如下:

        num=1

        while [[ `expr $num + 1` -le 1000 ]]

        do

               echo hello

               num=`expr $num + 1`

        done

    分析:

    [[ `expr $num + 1` -le 1000 ]]

    `expr $num + 1` exp1表达式

    1000     exp2表达式

    -le     是小于等于

    注意:

        expr $num + 1两端是反引号,也可以通过$(expr $num + 1)进行命令替换

4、逻辑运算符

    ⑴ 计算结果为真

        [[ (expr) ]]

    ⑵ 计算结果为假

        [[ ! expr ]]

    ⑶ 逻辑或

        [[ exp1 –a exp2 ]] 或 [[ exp1 && exp2 ]]

    ⑷ 逻辑与

        [[ exp1 –o exp2 ]] 或 [[ exp1 || exp2 ]]

查看评论

shell脚本:使用if-then语句和test命令

一、基本结构化命令if-then语句格式:if command then command fibash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码是0(该命令成功运...
  • weixin_36586564
  • weixin_36586564
  • 2017-12-19 15:27:22
  • 612

linux shell脚本中,关于test测试和if判断中常用的标志[-eq,gt..]

1. 关于某个文档的『文档类型』判断,如 test -e filename 表示存在否 -e 该『文档』是否存在(常用) -f 该『文档』是否存在且为档案(file)(常用) -d 该『文档』是...
  • u012906135
  • u012906135
  • 2016-07-15 17:25:00
  • 3784

SHELL脚本中exec命令

1 shell 中的exec用法  在shell脚本中使用exec命令,根据操作的对象不同会有不同的行为  1 操纵文件描述符     这里面又要说说描述符 shell中有12个描述符    ...
  • daohengshangqian
  • daohengshangqian
  • 2014-10-10 23:10:01
  • 7889

重复调用ab命令的shell代码和整理ab结果的java代码

先说下问题产生的背景,因为要做压力测试,频繁使用ab命令,需要测试好多项,每项测试要做10遍以上,测试完了还要画测试结果曲线,又因为公司内网不稳定,测十遍都找不到个准确值,所以只能在别人下班时测试。但...
  • u014426603
  • u014426603
  • 2016-05-09 09:10:36
  • 1606

Linux使用技巧:linux下将命令值赋给shell变量

很多小伙伴在写shell脚本的时候需要把命令输出的值赋给一些变量,使得脚本在运行过程中能够顺利使用这些变量。例如:很多时候我们就需要获取当前目录的绝对路径,pwd这个命令大家在熟悉不过,可是要把这个命...
  • solaraceboy
  • solaraceboy
  • 2017-11-09 09:55:14
  • 345

Shell脚本的test命令用法

Test命令用来检测某个条件表达式是否成立,根据判断的对象,分为数值测试,字符测试,文件测试和表达式4种。 1.数值测试 数值测试(图片来源) 参数 说明 -eq 等于则为真 ...
  • u011878191
  • u011878191
  • 2014-11-26 16:50:44
  • 582

shell脚本命令test详解

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则...
  • Watson2016
  • Watson2016
  • 2016-11-03 10:05:09
  • 220

shell脚本之test命令(六)

#!/bin/bash#数值测试 #参数 说明 #-eq 等于则为真 #-ne 不等于则为真 #-gt 大于则为真 #-ge 大于等于则为真 #-lt 小于则为真 #-l...
  • lishaojun0115
  • lishaojun0115
  • 2017-03-25 11:13:40
  • 128

shell脚本命令

  • 2014年01月17日 14:43
  • 45.08MB
  • 下载

Shell 脚本常用命令

Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。   1           Shell中的特...
  • lionfire
  • lionfire
  • 2011-07-26 11:22:15
  • 17161
    个人资料
    持之以恒
    等级:
    访问量: 1998
    积分: 318
    排名: 23万+
    文章存档