shell脚本----if(数字条件,字符串条件,字符串为空)
二元比较操作符,比较变量或者比较数字.
注意数字与字符串的区别.
1.整数比较
- -eq 等于,如:if [ "$a" -eq "$b" ]
 - -ne 不等于,如:if [ "$a" -ne "$b" ]
 - -gt 大于,如:if [ "$a" -gt "$b" ]
 - -ge 大于等于,如:if [ "$a" -ge "$b" ]
 - -lt 小于,如:if [ "$a" -lt "$b" ]
 - -le 小于等于,如:if [ "$a" -le "$b" ]
 - < 小于(需要双括号),如:(("$a" < "$b"))
 - <= 小于等于(需要双括号),如:(("$a" <= "$b"))
 - > 大于(需要双括号),如:(("$a" > "$b"))
 - >= 大于等于(需要双括号),如:(("$a" >= "$b"))
 
小数据比较可使用AWK
2.字符串比较
- = 等于,如:if [ "$a" = "$b" ]
 - == 等于,如:if [ "$a" == "$b" ],与=等价
 
注意:
注意:==的功能在[[]]和[]中的行为是不同的,如下:
- [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
 - [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
 - [ $a == z* ] # File globbing 和word splitting将会发生
 - [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
 
一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 
但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像. 
!= 不等于,如:if [ "$a" != "$b" ] 
这个操作符将在[[]]结构中使用模式匹配. 
< 小于,在ASCII字母顺序下.如: 
if [[ "$a" < "$b" ]] 
if [ "$a" \< "$b" ] 
注意:在[]结构中"<"需要被转义. 
> 大于,在ASCII字母顺序下.如: 
if [[ "$a" > "$b" ]] 
if [ "$a" \> "$b" ] 
注意:在[]结构中">"需要被转义. 
具体参考Example 26-11来查看这个操作符应用的例子. 
-z 字符串为"null".就是长度为0. 
-n 字符串不为"null" 
注意: 
使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z 
或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可
以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.
举例:
1.数字比较
- #!/bin/bash
 - i=6
 - a=10
 - if [ $a -eq 10 ]
 - then
 - echo "a = 10"
 - fi
 - if [ $a -ne $i ]
 - then
 - echo "a != $i"
 - fi
 - if [ $a -gt $i ]
 - then
 - echo "a > i"
 - fi
 - if [ $a -lt $i ]
 - then
 - echo "a < i"
 - else
 - echo "a > i"
 - fi
 - if(("$a" > "$i"))
 - then
 - echo "(())a>i"
 - fi
 - if(($a != $i))
 - then
 - echo "(())a!=i"
 - fi
 
备注:通过sh运行脚本,[ ]运算是可以的,而(())运行出错
chmod 777 后,直接./ 运行,都可以
2.字符串比较
- #!/bin/bash
 - a="123"
 - b="1234"
 - c="123"
 - if [ "$a"x != "$b"x ]
 - then
 - echo "a != b"
 - fi
 - if [ "$a"x = "$c"x ]
 - then
 - echo "a == c"
 - fi
 
判断字符串为空
- if [ -z "$d" ]
 - then
 - echo "d is empty"
 - fi
 
备注:
-e                          文件存在
-a                          文件存在(已被弃用)
-f                          被测文件是一个regular文件(正常文件,非目录或设备)
-s                          文件长度不为0
-d                          被测对象是目录
-b                          被测对象是块设备
-c                          被测对象是字符设备
-p                          被测对象是管道
-h                          被测文件是符号连接
-L                          被测文件是符号连接
-S(大写)                    被测文件是一个socket
-t                          关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端
-r                          文件具有读权限,针对运行脚本的用户
-w                          文件具有写权限,针对运行脚本的用户
-x                          文件具有执行权限,针对运行脚本的用户
-u                          set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现
-k                          设置粘贴位
-O                          运行脚本的用户是文件的所有者
-G                          文件的group-id和运行脚本的用户相同
-N                          从文件最后被阅读到现在,是否被修改
f1 -nt f2                   文件f1是否比f2新
f1 -ot f2                   文件f1是否比f2旧
f1 -ef f2                   文件f1和f2是否硬连接到同一个文件
二元比较操作符,比较变量或比较数字
整数比较:
-eq                       等于            if [ "$a" -eq "$b" ]
-ne                       不等于          if [ "$a" -ne "$b" ]
-gt                       大于            if [ "$a" -gt "$b" ]
-ge                       大于等于        if [ "$a" -ge "$b" ]
-lt                       小于            if [ "$a" -lt "$b" ]
-le                       小于等于        if [ "$a" -le "$b" ]
<                         小于(需要双括号)           (( "$a" < "$b" ))
<=                        小于等于(...)                (( "$a" <= "$b" ))
>                         大于(...)                    (( "$a" > "$b" ))
>=                        大于等于(...)                (( "$a" >= "$b" ))
字符串比较:
=                         等于           if [ "$a" = "$b" ]
==                        与=等价
!=                        不等于         if [ "$a" = "$b" ]
<                         小于,在ASCII字母中的顺序:
                          if [[ "$a" < "$b" ]]
                          if [ "$a" \< "$b" ]         #需要对<进行转义
>                         大于
-z                        字符串为null,即长度为0
-n                        字符串不为null,即长度不为0
shell脚本----if(数字条件,字符串条件,字符串为空)的更多相关文章
- shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出
		
shell脚本中sqlite3命令查询数据库失败返回空,并将错误信息打印到标准错误输出 如: #/bin/sh local ret='sqlite3 test.db "select test ...
 - shell脚本编程(一) 变量、条件判断、循环
		
目录 1. shell脚本编程 2. 运行 Shell 脚本有两种方法 3. 变量 4. 本地变量 5. 环境变量 6. 参数变量 7. 多行注释 8. if条件判断 ...
 - shell脚本之通过发送带\n字符串或expect脚本实现交互输入自动化
		
编写shell脚本难免遇到需要交互式输入指令的步骤: 方法一: # cat action.sh #!/bin/sh read -p "enter number:" no; read ...
 - Shell脚本中判断输入变量或者参数是否为空的方法
		
shell判断一个变量是否为空方法总结 https://www.jb51.net/article/154835.htm 1.判断变量 复制代码代码如下: read -p "input a w ...
 - Shell脚本笔记(四)条件判断
		
条件判断 一.条件测试与比较 一)条件测试基础语法 下列测试语法中如果测试的表达式成立,条件测试就会结束,并返回0. 1.test条件测试 语法:test <测试表达式> 2.中括号条件 ...
 - shell脚本if语句的多种条件参数
		
if语句有多种写法 [root@shell-yankerp sh]# [ -f file ] && echo "yes" || echo "no" ...
 - Shell脚本的学习笔记二:字符串
		
菜鸟教程提供的Shell在线编辑器 Shell 字符串 项目 功能 单引号 原样输出,变量无效.但可用成对单引号嵌套成对单引号输出变量 双引号 定义字符串中附带有变量的命令并且想将其解析后再输出的变量 ...
 - shell 脚本sed替换文件中某个字符串
		
有些大文件,特别的大.有几百兆,甚至更大. 用文本编辑器打开十分的费劲,电脑都卡死了. 想替换其中的字符串,很麻烦. 这个时候有了shell,简直强大到爆炸! # du -h user.sql 304 ...
 - shell脚本,判断给出的字符串是否相等。
		
第一种方法[root@localhost wyb]# .sh #!/bin/bash #判断给出的字符串是否相等 read -p "Please Input a number:" ...
 - shell脚本,检查给出的字符串是否为回文
		
[root@localhost wyb]# .sh #!/bin/bash #检查给出的字符串是否为回文 read -p "Please input a String:" numb ...
 
随机推荐
- HDUOJ---1102Constructing Roads
			
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
 - Python程序数据溢出问题或出现 NAN 问题
			
[数据溢出问题] overflow:溢出 overflow:上溢 underflow:下溢 数据溢出包括上溢和下溢. 上溢可以理解为:你想用一个int类型来保存一个非常非常大的数,而这个超出了int类 ...
 - invalid configuration x86_64-unknown-linux-gnu' machine x86_64-unknown' not recognized
			
转载自:http://blog.csdn.net/php_boy/article/details/7382998 前两天在装机器软件的时候, 出现了下面的错误, invalid configurati ...
 - ubuntu(14.04) 安装ssh,并使用root用户登录
			
1.apt-get install openssh-server 2.修改ssh的配置文件/etc/ssh/sshd_config 注释掉以前的:PermitRootLogin without-pas ...
 - 基于 html5 geolocation来获取经纬度地址(copy)
			
geolocation来获取经纬度地址 以前如果要获取互联网用户所在地都是根据用户的IP地址来获取地理位置,这样获取到的数据和真实数据有很大的偏差.为了获取更加精确的位置,可以使用了html5的geo ...
 - 非微信内如何调起wap版微信支付
			
微信支付一直没有出wap版,wap版想用微信支付,只有在微信内调用才可以.今天偶然发现,中国电信一个wap站点, 不在微信内也能调起微信支付,而且官方还提供了一个demo. WAP怎么调起客户端? 在 ...
 - node 服务器开发必备神器 —— nodemon
			
nodemon 官方网站:http://nodemon.io/ github地址:https://github.com/remy/nodemon/ 简介:Nodemon 是一款非常实用的工具,用来监控 ...
 - jenkins 发送邮件模板
			
jenkins 发送邮件模板 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
 - Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
			
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...
 - Java生成二维码QRCode.jar
			
所需jar包:QRCode.jar:http://download.csdn.net/detail/xuxu198899223/7717745 package ewm; import java.awt ...