`
ruishen
  • 浏览: 52034 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Shell 条件测试

 
阅读更多

分类参考

文件状态测试

-b filename 当filename 存在并且是块文件时返回真(返回0)
-c filename 当filename 存在并且是字符文件时返回真
-d pathname 当pathname 存在并且是一个目录时返回真
-e pathname 当由pathname 指定的文件或目录存在时返回真
-f filename 当filename 存在并且是正规文件时返回真
-g pathname 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真
-h filename 当filename 存在并且是符号链接文件时返回真 (或 -L filename)
-k pathname 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真
-p filename 当filename 存在并且是命名管道时返回真
-r pathname 当由pathname 指定的文件或目录存在并且可读时返回真
-s filename 当filename 存在并且文件大小大于0 时返回真
-S filename 当filename 存在并且是socket 时返回真
-t fd 当fd 是与终端设备相关联的文件描述符时返回真
-u pathname 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真
-w pathname 当由pathname 指定的文件或目录存在并且可写时返回真
-x pathname 当由pathname 指定的文件或目录存在并且可执行时返回真
-O pathname 当由pathname 存在并且被当前进程的有效用户id 的用户拥有时返回真(字母O 大写)
-G pathname 当由pathname 存在并且属于当前进程的有效用户id 的用户的用户组时返回真
file1 -nt file2 file1 比file2 新时返回真
file1 -ot file2 file1 比file2 旧时返回真
f1 -ef f2 files f1 and f2 are hard links to the same file

举例: if [ -b /dev/hda ] ;then echo "yes" ;else echo "no";fi // 将打印 yes

test -c /dev/hda ; echo $? // 将打印 1 表示test 命令的返回值为1,/dev/hda 不是字符设备

[ -w /etc/passwd ]; echo $? // 查看对当前用户而言,passwd 文件是否可写

测试时逻辑操作符

-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

举例: [ -w result.txt -a -w score.txt ] ;echo $? // 测试两个文件是否均可写

常见字符串测试

-z string 字符串string 为空串(长度为0)时返回真
-n string 字符串string 为非空串时返回真
str1 = str2 字符串str1 和字符串str2 相等时返回真
str1 == str2 同 =
str1 != str2 字符串str1 和字符串str2 不相等时返回真
str1 < str2 按字典顺序排序,字符串str1 在字符串str2 之前
str1 > str2 按字典顺序排序,字符串str1 在字符串str2 之后

举例: name="zqf"; [ $name = "zqf" ];echo $? // 打印 0 表示变量name 的值和字符串"zqf"相等

常见数值测试

int1 -eq int2 如果int1 等于int2,则返回真
int1 -ne int2 如果int1 不等于int2,则返回真
int1 -lt int2 如果int1 小于int2,则返回真
int1 -le int2 如果int1 小于等于int2,则返回真
int1 -gt int2 如果int1 大于int2,则返回真
int1 -ge int2 如果int1 大于等于int2,则返回真

在 (()) 中的测试:

< 小于(在双括号里使用) (("$a" < "$b"))
<= 小于等于 (在双括号里使用) (("$a" <= "$b"))
> 大于 (在双括号里使用) (("$a" > "$b"))
>= 大于等于(在双括号里使用) (("$a" >= "$b"))

举例: x=1 ; [ $x -eq 1 ] ; echo $? // 将打印 0 表示变量x 的值等于数字1 x=a ; [ $x -eq "1" ] // shell 打印错误信息 [: a: integer expression expected

test , [] , [[]]

因为 shell 和我们通常编程语言不同,更多的情况是和它交互,总是调用别人。 所以有些本属于程序语言本身的概念在 shell 中会难以理解。"基本功" 不好, 更容易 "犯困" 了,我就是一个 :-) 。

以 bash 为例 (其他兼容 shell 差不多):

  1. test 和 [ 是 bash 的内部命令,GNU/linux 系统的 coreutils 软件包通 常也带 /usr/bin/test 和 /usr/bin/[ 命令。如果我们不用绝对路径指 明,通常我们用的都是 bash 自带的命令。
  2. [[ 是 bash 程序语言的关键字!
$ ls -l /usr/bin/[ /usr/bin/test
-rwxr-xr-x 1 root root 37400  9月 18 15:25 /usr/bin/[
-rwxr-xr-x 1 root root 33920  9月 18 15:25 /usr/bin/test
$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin

绝大多数情况下,这个三个功能通用。但是命令和关键字总是有区别的。命令和 关键字的差别有多大呢?

如果是命令,它就和参数组合为一体被 shell 解释,那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。

在 [[ 中使用 && 和 ||

[ 中使用 -a 和 -o 表示逻辑与和逻辑或。

[[ 中可以使用通配符

arch=i486
[[ $arch = i*86 ]] && echo "arch is x86!"

[[ 中匹配字符串或通配符,不需要引号

    [[ $arch_com = i386 || $ARCH = i*86 ]] &&
    cat >> $TFS_REPO <<EOF
[tfs-i386]
name=GTES11.3 prelim1
baseurl=${BASEURL}i386/
enabled=1
EOF

分享到:
评论

相关推荐

    linux shell 条件测试

    linux shell 条件测试

    数据库,shell,测试知识

    在IT领域,数据库管理、Shell脚本编程以及测试知识是至关重要的技能,这些技术广泛应用于系统维护、自动化任务执行和软件质量保证。以下是对这些关键知识点的详细解释: ### 数据库 - Oracle Oracle数据库是全球最...

    使用 Bash shell 脚本进行功能测试

    ### 使用Bash Shell脚本进行功能测试:深入解析与实践指南 #### 引言 功能测试作为软件开发流程中的重要环节,旨在验证软件应用是否按照预期功能运行,并能妥善处理异常情况。传统的功能测试工具虽然强大,但往往...

    Linux Shell 入门基础

    #### 四、Shell条件测试 **`test`命令:** `test`命令用于检查某个条件是否成立,根据结果返回0或非0的退出状态。它可以用于比较字符串、整数或判断文件属性。 - 字符串比较: - `-z`: 检查字符串是否为空。 - `-...

    运维技术课程 Linux学习教程 Shell编程-2 共31页.pptx

    Shell条件测试 - **test命令**: 在Shell编程中,`test` 命令用于测试特定的表达式是否成立。当条件成立时,命令执行后的返回值为0;否则为非零值。 - **格式**: `test 条件表达式` - **示例**: `test -d /etc` ...

    shell中条件测试.docx

    在Linux Shell脚本编程中,条件测试是至关重要的部分,它允许我们检查各种条件并根据结果执行相应的操作。本文档详细介绍了如何在Shell中使用`test`语句进行条件测试。 1. **文件类型判断** `test`指令用于检测...

    Shell单元测试shunit学习材料

    ### Shell单元测试shunit学习材料 #### 概述 在软件开发过程中,单元测试作为确保代码质量的关键步骤之一,对于提高程序的可靠性和稳定性具有重要作用。对于Shell脚本而言,虽然其语法相对简单,但随着脚本功能的...

    shell 基本知识,包括控制结构,条件测试,通配符,引号等

    在本文中,我们将深入探讨Shell的基本知识,包括控制结构、条件测试、通配符和引号的使用。 **一、控制结构** 1. **顺序执行**:这是最基础的执行模式,命令按照在脚本或终端输入的顺序依次执行。 2. **分支结构**...

    Shell程序设计 - 条件测试.mp4

    Shell程序设计 - 条件测试.mp4,Linux系统shell编程培训视频,大厂内部员工培训视频资料,都是纯纯的干货,欢迎下载使用

    Linux Shell编程教程.rar

    03 Shell条件测试.pdf 04 Shell流程控制.pdf 05 Shell循环语句.pdf 06 Shell函数应用.pdf 07 Shell数组应用.pdf 08 Shell正则与三剑客.pdf 09 Shell项目实战.pdf scripts.tar.gz

    Linux常用命令和管理10-shell之条件测试及脚本实例11

    本文将详细讲解在Linux中如何进行条件测试以及编写相关脚本实例。条件测试是Linux脚本编程中的核心部分,它允许我们根据不同的条件执行不同的操作,极大地提高了自动化任务的灵活性。 1. **条件测试** 条件测试在...

    Bourne Shell及shell编程

    Bourne Shell 是一个功能强大且灵活的 shell,它提供了许多有用的特性和功能,例如变量、条件测试、循环控制、文件操作等。 shell 基础知识 Shell 是一个命令行接口,允许用户与操作系统进行交互。shell 提供了...

    linux-ts一个shell测试脚本

    首先,"ts"这个脚本名称可能是"test script"的缩写,它是一个用于测试目的的shell脚本,可能包含了各种条件判断、循环控制、文件操作等功能,以验证系统行为或程序功能。在Linux开发中,shell脚本测试是质量保证的一...

    SHELL自动化测试

    ### SHELL自动化测试 #### shell自动化运维概述 Shell在计算机系统中扮演着极其重要的角色,它作为用户与操作系统之间的桥梁,使得用户能够通过简单的命令行输入来操作复杂的系统功能。Shell脚本则进一步增强了...

    shell浅谈之二 运算符和if条件判断

    在Shell中,有多种类型的运算符用于条件测试: 1. **整数比较运算符**:如`-eq`(等于)、`-ne`(不等于)、`-lt`(小于)、`-gt`(大于)、`-le`(小于或等于)、`-ge`(大于或等于)。 2. **字符串运算符**:`=`...

    Linux详细教程大全之shell脚本基础2-条件测试及控制流.docx

    在“Linux详细教程大全之shell脚本基础2-条件测试及控制流”中,主要涵盖了如何进行条件测试以及如何使用不同的控制流结构来控制脚本的流程。 条件测试是Shell脚本中的关键部分,它允许脚本根据特定的条件执行不同...

    Shell脚本的条件测试和if条件语句使用方法

    一、条件测试操作 要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值(¥?)来判断是否执行成功,当返回值为0时表示成功,...

    自用shell脚本编辑1(条件测试:read,test,,)

    自用shell脚本编辑1(条件测试:read,test,,)

    shell程序设计-变量条件控制结构函数

    本文将深入探讨“shell程序设计-变量条件控制结构函数”这一主题,帮助你理解并掌握Linux程序设计的核心知识。 首先,我们要了解的是**变量**。在Shell编程中,变量用于存储数据,可以是文本、数字或者其他类型的...

Global site tag (gtag.js) - Google Analytics