shell-字符串及整数操作符讲解与多实践
1. 字符串测试操作符
字符串测试操作符的作用:比较两个字符串是否相同、字符串长度是否为零,字符串是否为null(注:bash区分零长度字符串和空字符串)等。
“=”比较两个字符串是否相同,与==等价,如if[ "$a" = "$b" ],其中$a这样的变量最好用""括起来,因为如果中间有空格,*等符号就可能出错了,当然更好的方法就是[ "${a}" = "${b}" ]。"!=" 比较两个字符串是否相同,不同则为“是”。
在书写测试表达式时,可以使用表1.3.1中的字符串测试操作符。
表1.3.1中 字符串测试操作符

特别注意:以上表格中的字符串测试操作符号务必要用" "引起来。
字符串测试操作符提示:
1. -n 比较字符串长度是否不为零,如果不为零则为真,如: [ -n "$myvar" ]
2. -z 比较字符串长度是否等于零,如果等于零则为为真,如:[ -z "$myvar" ]
2. 整数二元比较操作符
在书写测试表达式时,可以使用表1.3.6中的整数二元比较操作符
表1.3.6中整数二元比较操作符、

提示:
1) “<”符号意思是小于,if [[ "$a" < "$b" ]],if[ "$a" \< "$b" ]。在单[ ]中需要转义,因为shell也用<和>重定向
2) “>”符号意思是小于,if [[ "$a" > "$b" ]],if[ "$a" \> "$b" ]。在单[ ]中需要转义,因为shell也用<和>重定向
3) “=”符号意思是小于,if [[ "$a" = "$b" ]],if[ "$a" = "$b" ]。在单[ ] 中不需要转义
提示:
经过实践,"=" 和 "!=" 在[ ]中使用不需要转义,包含">" 和"<" 的符号在[ ]中使用需要转义,对于数字不转义的结果未必会报错,但是结果可能不会对。
范例1:二元数字比较
[root@test-1 ~]# [ 2 > 1 ] && echo 1 ||echo 0
1
[root@test-1 ~]# [ 2 < 1 ] && echo 1 ||echo 0
1 #这里的结果逻辑不对,条件不成立,应该返回 0
[root@test-1 ~]# [ 2 \< 1 ] && echo 1 ||echo 0
0 #转义后是正确的。
[root@test-1 ~]# [ 2 -gt 1 ] && echo 1 ||echo 0
1
[root@test-1 ~]# [ 2 -lt 1 ] && echo 1 ||echo 0
0
[root@test-1 ~]# [ 2 > 1 ] && echo 1 ||echo 0
1
[root@test-1 ~]# [[ 2 > 1 ]] && echo 1 ||echo 0
1
[root@test-1 ~]# [[ 2 < 1 ]] && echo 1 ||echo 0
0
[root@test-1 ~]# [ 2 = 1 ] && echo 1 ||echo 0
0
[root@test-1 ~]# [ 1 = 1 ] && echo 1 ||echo 0
1
[root@test-1 ~]# [ 2 = 1 ] && echo 1 ||echo 0
0
[root@test-1 ~]# [ 2 = 2 ] && echo 1 ||echo 0
1
[root@test-1 ~]# [ 2 != 2 ] && echo 1 ||echo 0
0
提示:经过实践,“=”和“!=”在[ ]中使用不需要转义也可以。
[root@test-1 ~]# [[ 2 -lt 1 ]] && echo 1 ||echo 0
0
[root@test-1 ~]# [[ 2 -gt 1 ]] && echo 1 ||echo 0
1
范例2:二元字符比较
[root@test-1 ~]# [ "a" > "bc" ] && echo 1 ||echo 0
1
[root@test-1 ~]# [ "a" < "bc" ] && echo 1 ||echo 0
1 #上面两个条件不一样,但结果一样,虽然没报语法错误,但显然不对。
[root@test-1 ~]# [ "a" \> "bc" ] && echo 1 ||echo 0
0
[root@test-1 ~]# [ "a" \< "bc" ] && echo 1 ||echo 0
1
#加上对比较的转义后,逻辑上显示正确了。
shell-字符串及整数操作符讲解与多实践的更多相关文章
- Shell 字符串比较
转自网络 Shell字符串比较 收藏 Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等. 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. --- ...
- [LeetCode] String to Integer (atoi) 字符串转为整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- linux shell 字符串操作(长度,查找,替换)详解
linux shell 字符串操作(长度,查找,替换)详解 在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系 ...
- 【转】shell字符串截取
shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...
- [LeetCode] 8. String to Integer (atoi) 字符串转为整数
Implement atoi which converts a string to an integer. The function first discards as many whitespace ...
- 【LeetCode】8. String to Integer (atoi) 字符串转换整数
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:字符串转整数,atoi,题解,Leetcode, 力扣,P ...
- 【LintCode】转换字符串到整数
问题描述: 实现atoi这个函数,将一个字符串转换为整数.如果没有合法的整数,返回0.如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-21 ...
- shell字符串操作详解
shell字符串操作详解的相关资料. 1.shell变量声明的判断 表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DE ...
- PostgreSql字符串函数和操作符
本节描述了用于检查和操作字符串数值的函数和操作符.在这个环境中的字符串包括所有 character, character varying, text 类型的值.除非另外说明,所有下面列出的函数都可以处 ...
随机推荐
- 面试【JAVA基础】集合类
1.ArrayList的扩容机制 每次扩容是原来容量的1.5倍,通过移位的方法实现. 使用copyOf的方式进行扩容. 扩容算法是首先获取到扩容前容器的大小.然后通过oldCapacity (oldC ...
- NutUI 视频组件开发心得
引子 说到在项目中引入一个视频,我们肯定会想到 HTML5 为我们提供的 Video 标签,它为我们提供了许多属性和方法,使用起来很方便,当然直接使用也会遇到各种兼容问题,在最初学习 Video 标签 ...
- 02_套接字编程(socket抽象层)
1.套接字概述 1.套接概述: 套接是进行网络通信的一种手段(socket) 2.套接字分类: 流式套接字(SOCK_STREAM): 传输层基于tcp协议进行通信 数 ...
- [Python]打印指定目录下所有子目录
import os for root,dirs,files in os.walk(r"/home/os-hy01"): for dir in dirs: print(dir) -- ...
- java中数据类型占多少字节
基本类型(primitive type) 数值类型:byte占1个字节:short占2个字节:int占4个字节:long占8个字节:float占4个字节:double占8个字节.char占2个字节. ...
- 【原创】Kuberneters-HelmV3.3.1入门介绍及实践
一.为什么需要Helm? Kubernetes目前已成为容器编排的事实标准,随着传统架构向微服务容器化架构的转变,从一个巨大的单体的应用切分为多个微服务,每个微服务可独立部署和扩展,实现了敏捷开发和快 ...
- 漏洞扫描工具acunetix12会遇到的问题
1.如果安装好之后,打开工具时显示无法访问,首先去看任务管理器当中,acunetix的服务是否启动了 2.如果忘记了账号密码,可以在安装目录下,双击ChangePassword.exe进行重置密码
- 吴恩达《深度学习》-第二门课 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)-第一周:深度学习的实践层面 (Practical aspects of Deep Learning) -课程笔记
第一周:深度学习的实践层面 (Practical aspects of Deep Learning) 1.1 训练,验证,测试集(Train / Dev / Test sets) 创建新应用的过程中, ...
- Video.js + HLS 在production环境下webpack打包后出错的解决方案
Video.js是一个非常强大的视频播放库,能在微信下完美提供inline小窗口播放模式,但当涉及到hls格式视频播放时就比较麻烦,出现的数种现象都不好解决. 错误现象: 1. PC Chrome ...
- 透过 Cucumber 学习 BDD
在需求的开发过程中,最令人困惑的地方就在于需求模糊.需求是解决业务的问题,那么验收的方式应该是由业务方提出,但是往往业务方(可能是产品经理,也可能是直接是客户)只能给出比较模糊的一个验收标准,而程序却 ...