Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)
一.概述
接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下:
--格式如下:
if [ condition ]
then
commands
fi
第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。test命令可以判断三类条件:(1)数值比较(2)字符串比较(3)文件比较。
1.1 数值比较
| 
 比较  | 
 描述  | 
 例如  | 
| 
 n1 -gq n2  | 
 检查n1是否与n2相等  | 
 N1 ==N2  | 
| 
 n1 -ge n2  | 
 检查n1是否大于或等于n2  | 
 N1 >=N2  | 
| 
 n1 -gt n2  | 
 检查n1是否大于n2  | 
 N1 < N2  | 
| 
 n1 -le n2  | 
 检查n1是否小于或等于n2  | 
 N1 <=N2  | 
| 
 n1 -lt n2  | 
 检查n1是否小于n2  | 
 N1 <N2  | 
| 
 n1 -ne n2  | 
 检查n1是否不等于n2  | 
 N1 !=N2  | 
    下面测试脚本中,第一个条件使用 -gt,  value1是否大于value2。 第二个条件使用-eq 测试value1 是否与value2相等。
          
    但涉及到浮点数时,就会出错,bash shell 只能处理整数,如下所示:
          
    对于浮点数处理,在前面章节中讲过使用bc 命令,下面脚本中先用bc来判断,如果条件成立则返回1, 条件不成立返回0, 下面的var1变量返回为1,输出了echo语句信息。
          
1.2 字符串比较
| 
 比较  | 
 描述  | 
| 
 str1 = str2  | 
 检查str1是否与 str2 相同  | 
| 
 str1 != str2  | 
 检查str1是否与 str2 不同  | 
| 
 str1 < str2  | 
 检查str1是否比 str2 小  | 
| 
 str1 > str2  | 
 检查str1是否比 str2 大  | 
| 
 -n str1  | 
 检查str1的长度是否非0  | 
| 
 -z str1  | 
 检查str1的长度是否为0  | 
    (1) 字符串相等案例, 相等成立,输出了echo 信息。不等于案例就不在演示。
          
    (2) 字符串比较
      对于字符串比较,在编程中很少使用,这里不在演示。 比较是使用标准的ascii顺序。
    (3) 字符串大小
      使用-n 和 -z 可以检查一个变量是否有数据,如下所示变量value1的值不为空,条件成立。
          
      下面一个案例是 value1变量从未被定义过, 判断长度是否为0,  未被定义的变量但长度仍然是0,输出了if then中的echo信息。
          
      总结:空的和未初始化的变量会对shell脚本测试造成空难性的影响,如果不确定一个变量的内容,最好在将用于数值或字符串比较之前先通过-z来测试变量是否有值。 下面案例中valu1变量未定义,value2变量内容为空,value3变量内容不为空, 分别输出信息如下:
          
Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)的更多相关文章
- Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)
		
一.概述 在上一篇里讲到了shell脚本,shell按照命令在脚本中出现的顺序依次进行处理,对于顺序操作已经足够了,但许多程序要求对shell脚本中的命令加入一些逻辑流程控制,这样的命令通常叫做 结构 ...
 - Linux与Unix shell编程指南(完整高清版).pdf
		
找到一本很详细的Linux Shell脚本教程,其实里面不光讲了Shell脚本编程,还介绍了系统的各种命令 http://vdisk.weibo.com/s/yVBlEojGMQMpv 本书共分五部分 ...
 - Linux下的Shell编程
		
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
 - Linux学习之Shell编程基础
		
转自:http://my.oschina.net/itblog/blog/204410 1 语法基本介绍1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来 ...
 - [No000014A]Linux简介与shell编程
		
Linux 介绍 内核 库: .so 共享对象,windows:dll 动态链接库 应用程序 Linux的基本原则: 1.由目的单一的小程序组成:组合小程序完成复杂任务: 2.一切皆文件: 3.尽量避 ...
 - linux操作系统5 shell编程
		
知识内容: 1.shell编程预备知识 2.shell变量 3.表达式与运算符 4.分支循环语句 5.函数 一.shell编程预备知识 1.什么是shell编程 shell是与linux交互的基本工具 ...
 - Linux下的shell编程入门
		
通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者 ...
 - Linux 与 unix shell编程指南——学习笔记
		
第一章 文件安全与权限 文件访问方式:读,写,执行. 针对用户:文件属主,同组用户,其它用户. 文件权限位最前面的字符代表文件类型,常用的如 d 目录:l 符号链 ...
 - linux下的Shell编程(3)shell里的流程控制
		
if 语句 if 表达式如果条件命令组为真,则执行 then 后的部分.标准形式: if 判断命令,可以有很多个,真假取最后的返回值 then 如果前述为真做什么 [ # 方括号代表可选,别真打进去了 ...
 
随机推荐
- ZOJ 2507 Let's play a game
			
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1507 MisereNim博弈.代码如下: //=========== ...
 - ubuntu16.04安装tensorflow1.3
			
总结 : 1.点软件个更新-系统更新2.降级gcc到5.33.装CUDA及第二个包,加入PATH4.CUDNN5.Ancada..6.TF Ubuntu16.04 的GCC版本降级 http://bl ...
 - Java中如何创建一个新的对象的/Creating Objects/
			
The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't ...
 - 【翻译】Flume 1.8.0 User Guide(用户指南) Channel
			
翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...
 - MySQL-查询结果缓存
			
1.缓存必备: SQL文相同,数库表字段构.记录不变,大小写不敏感,字符集敏感 2.提缓存: 缓存配高.分区 3.多个应用多配置 4.SELECT SQL_NO_CACHE/SQL_CACHE my. ...
 - 通过iptables添加QoS标记
			
1.什么是QoS QoS是一种控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级,或者是根据应用程序的要求,保证数据流的性能达到一定的水准.QoS的保证对于容量有限的网络来说是十分重要的 ...
 - UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug
			
如题: UITableViewCell上放UICollectionView ,UICollectionViewCell无法复用bug 如果UITableViewCell的size大于整个collect ...
 - 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
			
[.NET Core项目实战-统一认证平台]开篇及目录索引 本篇将介绍如何扩展Ocelot中间件实现自定义网关,并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能,内容也是从实际设计出发 ...
 - Dubbo 源码分析 - 集群容错之 Router
			
1. 简介 上一篇文章分析了集群容错的第一部分 -- 服务目录 Directory.服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由.上一篇文章关于服务路由相关逻辑没有 ...
 - Nerd的套现ATM机
			
Nerd是一群似乎只在学生阶段才出尽风头的人.不善言辞,闷头学习,每遇考试便战功赫赫风光无限,赢得天下名.这样的描述,对那些成绩一般.喜欢天马行空.甚至有些多动症倾向的人来讲,无异于是噩梦.幸好有社会 ...