原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://navyaijm.blog.51cto.com/4647068/809445

shell语法中的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 脚本的能力时常被低估,但实际上其能力的发挥受制于脚本撰写者的能力。您了解得越多,您就越能像变戏法似地撰写一个文件来使任务自动化和简化您的管理工作。

  在 shell 脚本中进行的每一种操作(除最简单的命令编组之外)都需要检查条件。所有的 shell 脚本“逻辑” — 广义意义下的“逻辑” — 通常都可以分为以下三大类:

  if {condition exists} then ...

  while {condition exists} do ...

  until {condition exists} do ...

  无论随后的操作是什么,这些基于逻辑的命令都依靠判断一种条件是否真实存在来决定后续的操作。test 命令是使得在每一种情况下都能够确定要判断的条件是否存在的实用工具。因此,彻底了解这个命令对于撰写成功的 shell 脚本至关重要。

  工作原理

  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 文件运算符

  利用这些运算符,您可以在程序中根据对文件类型的评估结果执行不同的操作:

  -b file 如果文件为一个块特殊文件,则为真

  -c file 如果文件为一个字符特殊文件,则为真

  -d file 如果文件为一个目录,则为真

  -e file 如果文件存在,则为真

  -f file 如果文件为一个普通文件,则为真

  -g file 如果设置了文件的 SGID 位,则为真

  -G file 如果文件存在且归该组所有,则为真

  -k file 如果设置了文件的粘着位,则为真

  -O file 如果文件存在并且归该用户所有,则为真

  -p file 如果文件为一个命名管道,则为真

  -r file 如果文件可读,则为真

  -s file 如果文件的长度不为零,则为真

  -S file 如果文件为一个套接字特殊文件,则为真

  -t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真

  -u file 如果设置了文件的 SUID 位,则为真

  -w file 如果文件可写,则为真

  -x file 如果文件可执行,则为真

ge:

1.[root@hdp-249 ~]# vi b.sh

#!/bin/bash
file1=/tmp/file1
file2=/tmp/file2
if
    [ $file1 -nt $file2 ]
then
    echo "$file1 is than $file2 new"
else
    echo "$file1 is not than $file2 new"

2.检查val1和val2是否相同

3.检查val1和val2是否不同

4.检查文件的长度是否为0

5.检查file1是否小于file2

注意"\"做转意用

本文出自 “屌丝运维男” 博客,请务必保留此出处http://navyaijm.blog.51cto.com/4647068/809445

学习shell的第三天相关推荐

  1. linux shell概述,Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  2. 鸟哥的Linux私房菜-第10/11/12/13章(vim程序编辑器、学习bash、正则表达式与文件格式化处理、学习Shell Scripts)...

    第10章 vim程序编辑器 可以将vim看做vi的进阶版本,vim可以用颜色或底线等方式来显示出一些特殊的信息. 为何要学习vim?因为: a. 所有的 Unix Like 系统都会内建 vi 文书编 ...

  3. 零基础学习Shell编程

    一:起因 (0)也许由于一时的冲动使得你开始关注并学习shell编程:亦许由于是"道听途说"shell的威力很大:亦许由于shell编程的魅力:亦许由于作为一个coder的偏好:亦 ...

  4. 《Linux命令行大全》学习笔记1——学习 Shell

    文章目录 前言 一.什么是Shell 二.导航 三.探索 Linux 系统 ls file less 四.操作文件和目录 通配符 mkdir cp mv rm ln 五.和命令打交道 六.重定向 标准 ...

  5. 学习Shell的经典好书推荐

    学习Shell的经典好书推荐 Shell是系统管理员必备的利器,我们去学习他有哪些好书呢?今天我就来推荐一些. <UNIX Shells by Example Fourth Edition> ...

  6. 《Linux命令行大全》重点笔记——第一部分 学习shell

    <Linux命令行大全>重点笔记 第一部分 学习shell 第一章 shell是什么 1.3 简单命令 1.date:系统时间.日期. 2.cal:当月日历. 3.df:磁盘可用空间. 4 ...

  7. 学习 shell 有什么好书推荐?

    linux命令行与shell脚本编程大全 这本书是入门级的读物,作为入门材料非常合适.可惜我入门的时侯没有遇到它.虽然很大 部头,其实一天也就能看完了.讲的东西比较全面,也比较简单.三颗星推荐. li ...

  8. 小白学习shell命令---自学笔记

    Linux系统介绍. 什么是操作系统 首先,操作系统是一个软件,控制计算机整体运行的系统软件.可以管理计算机的硬件与软件资源.提供用户使用计算机的接口;提供了软件运行的环境.常用的操作系统有windo ...

  9. 【Linux命令】《鸟哥Linux基础》第十二章 学习shell脚本

    第十二章 学习shell脚本 通常利用shell脚本完成服务器的检测工作,不涉及大量运算. 12.1 简单shell脚本介绍 12.2 简单shell脚本练习 12.2.1 简单范例 范例1:永远的开 ...

  10. 「学习笔记-Linux」学习Shell Script

    学习Shell Script Table of Contents 1 什么是Shell Scipt 1.1 程序书写 1.2 程序执行 2 简单Shell练习 2.1 例1 接收用户输入 2.2 例2 ...

最新文章

  1. leetcode算法题--回文数
  2. Ubuntu16.04 使用sudo cat EOF 编辑文件,提示Permission denied错误的解决办法
  3. 【自动驾驶】33.【图像坐标系】 到 【像素坐标系】 的度量单位变换、【英寸】、【感光芯片】
  4. python高斯滤波和降噪_python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子...
  5. eclipse开发javaweb项目配置tomcat
  6. iptables01
  7. Asp.net中的页面乱码的问题
  8. 产品配件类目税目分类_商品和服务税收分类编码
  9. qq音乐linux版本下载地址,qq音乐linux版本下载
  10. iPhone手机上最不起眼的5款APP,用过的人都赞不绝口!
  11. 软件开发模型:瀑布模型,增量模型,原型模型,螺旋模型,喷泉模型,敏捷开发模型
  12. Python实现文字合成音频文件
  13. Pyinstaller 打包Pyside2 报错qt.qpa.plugin
  14. 微软也招 Java!
  15. U盘数据恢复软件推荐
  16. iOS 百度地图_自定义Annotation大头针_修改大头针图片
  17. python PIL图片拼接
  18. 服务拆分的设计和思考(B2B 技术共享第九篇)
  19. 结构体是纸老虎,旧知识新用法,easy
  20. C++ 11的移动语义 - 清晰的示例及浅显的说理

热门文章

  1. Image.fromarray的用法(实现array到image的转换)
  2. php多个 运算_php计算多个集合的笛卡尔积实例详解
  3. sklearn文本特征提取
  4. HashMap、LinkedHashMap、HashTable、HashSet笔记
  5. django连接mysql
  6. 找到好东西,可以显示最忙碌的java线程的脚本
  7. VC++使用CImage在内存中Bmp转换Jpeg图片
  8. C++ string 的学习摘录
  9. PE格式详细讲解5 - 系统篇05|解密系列
  10. 首页增加了“阅读排行”