判断语句

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回其他随机数值。
条件测试语法的执行格式为 [ 条件表达式 ],切记,条件表达式两边均应有一个空格。

条件表达式也可以使用 “test 条件表达式” 格式来使用。

条件测试语句可以分为4种:文件测试语句、逻辑测试语句、整数值比较语句、字符串比较语句

1. 文件测试语句

  1. -d 测试文件是否为目录类型
  2. -e 测试文件是否存在
  3. -f 判断是否为一般文件
  4. -r 测试当前用户是否有权限读取
  5. -w 测试当前用户是否有权限写入
  6. -x 测试当前用户是否有权限执行

使用测试语句判断testdir是否为一个目录类型的文件,然后通过Shell解释器的内设¥?变量显示上一条命令执行后的返回值。如果返回值为0,则目录存在;如果返回值为非零的值,则目录不存在。

  1. #测试语句与$?搭配使用
  2. [root@rockman 0615]# ls -l
  3. total 4
  4. -rw-r--r--. 1 root root 140 Jun 15 16:43 example.sh
  5. drwxr-xr-x. 2 root root 6 Jun 15 17:10 testdir
  6. [root@rockman 0615]# [ -d testdir ]
  7. [root@rockman 0615]# echo $?
  8. #成功返回0
  9. 0
  10. [root@rockman 0615]# test -d testdir
  11. [root@rockman 0615]# echo $?
  12. #成功返回0
  13. 0

2. 逻辑测试语句

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。

2.1 Shell中的逻辑“与” &&

表示当前面的命令执行成功后才会执行它后面的命令。

  1. #如果testdir存在,则打印Exist
  2. [root@rockman 0615]# [ -e testdir ] && echo "Exist"
  3. Exist
2.2 Shell中的逻辑“或” ||

表示当前面的命令执行失败才会执行它后面的名令。

  1. #如果testdir01不存在,则打印Not Exist
  2. [root@rockman 0615]# [ -e testdir01 ] || echo "Not Exist"
  3. Not Exist
2.3 Shell中的逻辑“非” !

它表示把条件测试 中的判断结果取相反值。

  1. #如果[ ! $USER = root ]执行失败,则答应administrator
  2. [root@rockman 0615]# [ ! $USER = root ] || echo "administrator"
  3. administrator
2.4 逻辑语句的综合示例
  1. #先判断当前登录用户的USER变量名称是否等于root,然后用“!”取反,效果就变成了判断当前用户是否不是root
  2. #如果条件成立(即不是root用户),则会根据逻辑“与”运算符输出user字样
  3. #如果条件不成立(即是root用户),则前面的[ ! $USER = root ] && echo "user"语句执行失败,此时便会执行"||"后面的语句,输出root字样
  4. [root@rockman 0619]# [ ! $USER = root ] && echo "user" || echo "root"
  5. root

3. 整数值比较语句

整数比较运算符仅是对数字的操作,不能将数字与字符串、文件等内容一起操作,而且不能想当然地使用日常生活张工的等号、大于号、小于号来判断。

  1. -eq 是否等于
  2. -ne 是否不等于
  3. -gt 是否大于
  4. -lt 是否小于
  5. -le 是否等于或小于
  6. -ge 是否大于或等于
  1. [root@rockman 0619]# [ 10 -eq 10 ]
  2. [root@rockman 0619]# echo $?
  3. #成功返回0
  4. 0
  5. [root@rockman 0619]# [ 10 -ne 10 ]
  6. [root@rockman 0619]# echo $?
  7. #失败返回非零
  8. 1

4. 字符串比较

字符串比较语句用于判断测试字符串是否为空值,或者两个字符串是否相同。它经常用来判断某个变量是否未被定义(即内容为空值)。

  1. = 比较字符串内容是否相同
  2. != 比较字符串内容是否不同
  3. -z 判断字符串内容是否为空
  1. [root@rockman 0619]# [ -z $String ]
  2. [root@rockman 0619]# echo $?
  3. #成功返回零,则String为空,未定义
  4. 0
  5. [root@rockman 0619]# [ $LANG != "en.US" ] && echo "Not en.US"
  6. Not en.US

14Shell脚本—判断语句的更多相关文章

  1. shell脚本判断语句和循环语句

    if判断语句 exit跳出判读语句 不加exit的结果 read -n(不换行) 判断是否输入的是数字 read age[[ $age =~ ^[0-9]+$ ]]if [ $? -ne 0 ]; t ...

  2. shell脚本if判断语句报错[: too many arguments的两种原因

    shell脚本,if判断语句报错[: too many arguments 我遇到过两种情况: 1.第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断 ...

  3. shell脚本的if判断语句

    if条件判断语句 if (表达式) #if ( Variable in Array ) 语句1 else 语句2 fi 1.测试数字大小 #!/bin/sh NUM=100 if (( $NUM &g ...

  4. shell 脚本——判断条件

    在之前的shell语言学习笔记中已经写过shell的几种判断语句及循环语句,也简单的介绍了shell语言判断语句和判断条件.在此再做进一步学习. test命令的测试功能 test命令用于检测系统文件及 ...

  5. python基础 数据类型 判断语句

    python 类unix系统默认已经安装或使用源码包./confighuremakemake install python运行方法 通过交互式解释器 [root@room1pc01 ~]# pytho ...

  6. C#开发Unity游戏教程之判断语句

    C#开发Unity游戏教程之判断语句 游戏执行路径的选择——判断 玩家在游戏时,无时无刻不在通过判断做出选择.例如,正是因为玩家做出的选择不同,才导致游戏朝着不同的剧情发展,因此一个玩家可以对一个游戏 ...

  7. linux条件测试操作(test)和if判断语句,while循环语句,break控制语句和for循环和case多分枝语句和select语句

    条件测试操作 条件测试是专为影响"$?"的操作,是条件转移.循环语句的基础   test测试命令: test 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0, ...

  8. 判断语句 、 while循环 、 for循环

    判断语句 语法结构 if 条件1: 如果条件1为真,执行语句块 elif 条件2: 如果条件2为真,执行语句块 elif 条件3: 如果条件2为真,执行语句块 elif 条件n: 如果条件n为真,执行 ...

  9. linux shell中的条件判断语句

    http://bbs.chinaunix.net/thread-396805-1-1.html shell 判断语句 流程控制 "if" 表达式 如果条件为真则执行then后面的部 ...

随机推荐

  1. [软件工程基础]Alpha 展示博客

    团队成员 个人简介 个人简介参照团队介绍博客. 个人博客 王嘉睿爵:http://www.cnblogs.com/whynotRW/ 游心:http://www.cnblogs.com/jefhq/ ...

  2. 2019湘潭校赛 G(并查集)

    要点 题目传送 题目本质是每个点必属于两个集合中的一个,伴随的性质是:如果一个人说别人true,则他们一定属于同一阵营:如果说别人fake,一定不属于同一阵营. 每个点拆为\(i\)和\(i + n\ ...

  3. Codeforces 161D(树形dp)

    \(dp[v][k]\)代表以\(v\)的子树为起点,以点\(v\)为终点长度为\(k\)的方案有多少种. 转移只需将子树加和:计算\(ans\)由两部分组成,一是\(dp[v][k]\),另一部分是 ...

  4. java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

    缺少slf4j-api.jar和slf4j-log4j12.jar这两个jar包导致的错误.

  5. proxy_pass http://127.0.0.1:5000; 502 bad getway

    (13: Permission denied) while connecting to upstream:[nginx] I am working with configuring django pr ...

  6. c++11 右值的学习

    从4行代码看右值引用 概述 简单的左值和右值的判断就是  看是否可以取得地址   可取得地址 是左值     不能则  是右值! c++98/03中的左值引用是这样的: int i = 0; int& ...

  7. nginx的配置文件server_name的意义 location意义

    配置不同的域名      不同域名都可以有首地址 location   同一域名下   分发到不同的路径   或者项目

  8. html学习笔记-XML

    html学习笔记-XML Table of Contents 1. XML简介 2. XML用途 3. XML树结构 4. XML语法 5. XML元素 6. XML属性 7. XML验证 8. XM ...

  9. Java transient关键字使用

    1. transient的作用及其使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的 ...

  10. img标签src资源无法加载,报net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION错

    html代码: chrome和360浏览器均报错,系统自带IE.Firefox浏览器没有问题 原因:加载的资源名含有半角逗号(,)或者别的特殊符号 解决办法:后台给资源名加上双引号("&qu ...