转载于:http://blog.csdn.net/ithomer/article/details/6836382

运算符 描述 示例
文件比较运算符
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string 长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]

算术运算符 
+ - * / % 表示加减乘除和取余运算
+= -= *= /= 同 C 语言中的含义

位操作符

> >>= 表示位左右移一位操作
& &= | |= 表示按位与、位或操作
~ ! 表示非操作
^ ^= 表示异或操作

关系运算符 

= == != 表示大于、小于、大于等于、小于等于、等于、不等于操作
&& || 逻辑与、逻辑或操作

测试命令

test命令用于检查某个条件是否成立,它可以进行数值、字符和文件3个方面的测试,其测试符和相应的功能分别如下。

(1)数值测试:

  -eq 等于则为真。

  -ne 不等于则为真。

  -gt 大于则为真。

  -ge 大于等于则为真。

  -lt 小于则为真。

  -le 小于等于则为真。

(2)字串测试:

  = 等于则为真。

  != 不相等则为真。

  -z字串 字串长度伪则为真。

  -n字串 字串长度不伪则为真。

(3)文件测试:

  -e文件名 如果文件存在则为真。

  -r文件名 如果文件存在且可读则为真。

  -w文件名 如果文件存在且可写则为真。

  -x文件名 如果文件存在且可执行则为真。

  -s文件名 如果文件存在且至少有一个字符则为真。

  -d文件名 如果文件存在且为目录则为真。

  -f文件名 如果文件存在且为普通文件则为真。

  -c文件名 如果文件存在且为字符型特殊文件则为真。

  -b文件名 如果文件存在且为块特殊文件则为真

条件变量替换: 
   Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 
条件放在{}中. 
(1) ${value:-word}

当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值.

(2) ${value:=word}

与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 word赋值给value

(3) ${value:?message}

若变量已赋值的话,正常替换.否则将消息message送到标准错误输出(若此替换出现在Shell程序中,那么该程序将终止运行)

(4) ${value:+word}

若变量已赋值的话,其值才用word替换,否则不进行任何替换

(5) ${value:offset}

${value:offset:length} 从变量中提取子串,这里offset和length可以是算术表达式.

(6) ${#value}

变量的字符个数

(7) ${value#pattern}

${value##pattern} 
       去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配 
       #与##的区别在于一个是最短匹配模式,一个是最长匹配模式.

(8) ${value%pattern}

${value%%pattern} 
       于(7)类似,只是是从value的尾部于pattern相匹配,%与%%的区别与#与##一样

(9) ${value/pattern/string}

${value//pattern/string} 
       进行变量内容的替换,把与pattern匹配的部分替换为string的内容,/与//的区别与上同

注意: 上述条件变量替换中,除(2)外,其余均不影响变量本身的值

#!/bin/bash

var1="1"
var2="2"

下面是“”运算符-a,另外注意,用一个test命令就可以了,还有if条件后面的分号

if test $var1 = "1"-a $var2 = "2" ; then
   echo "equal"
fi

下面是“”运算符 -o,有一个为真就可以

if test $var1 != "1" -o $var2 != "3" ; then
   echo "not equal"
fi

下面是“”运算符
if条件是为真的时候执行,如果使用!运算符,那么原表达式必须为false

if ! test $var1 != "1"; then
   echo "not 1"
fi

以上三个if都为真,所以三个echo都会打印

示例:

[javascript] view plaincopyprint?

  1. #!/bin/sh

  2. aa="August 15, 2012"

  3. bb="August 15, 20122"

  4. cc="123"

  5. dd="123"

  6. # -o

  7. if [ "$aa" = "$bb" -o "$cc" = "$dd" ]; then

  8. echo "yes"

  9. else

  10. echo "no"

  11. fi

  12. # -a and !

  13. if [ "$aa" != "$bb" -a "$cc" = "$dd" ]; then

  14. echo "yes"

  15. else

  16. echo "no"

  17. fi

运行结果:

true

------------------------------------------------------------------------------------------------------

shell字符串比较、判断是否为数字

二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.

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"))

整数比较实例

[css] view plaincopyprint?

  1. #!/bin/bash

  2. file='folder_url_top24/url_usa_top24_0'

  3. fileSize=`ls -l folder_url_top24/url_usa_top24_0 | awk -F '[" "]' '{print $5}'`

  4. FILESIZE=1000

  5. #while [ ! -f $file -o "$fileSize" -lt "$FILESIZE" ]

  6. #while [ ! -f $file -o "$fileSize" -lt 1000 ]

  7. while (("$fileSize" < 1000))

  8. do

  9. echo "down again..."

  10. done

其中,下面三种整数比较都成立:

1) while [ ! -f $file -o "$fileSize" -lt "$FILESIZE" ]

2) while [ ! -f $file -o "$fileSize" -lt 1000 ]

3) (("$fileSize" < 1000))

推荐使用第一种

2 字符串比较
=       等于,如:if [ "$a" = "$b" ]

==       等于,如:if [ "$a" == "$b" ],与=等价
       注意:==的功能在[[]]和[]中的行为是不同的,如下:
       1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true
       2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
       3
       4 [ $a == z* ]      # File globbing 和word splitting将会发生
       5 [ "$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"

判断shell传入的参数个数是否为空:

[python] view plaincopyprint?

  1. #!/bin/bash

  2. port=6379       # 命令行没参数,默认指定端口号为 6379

  3. if [ $# -ge 1 ]; then   # 命令行参数个数大于等于1,则使用传入的参数port

  4. port=$1     # 获取指定端口号

  5. fi

  6. echo "redis port: $port"

  7. redis-cli -h 172.1628.10.114 -p $port

字符串比较实例:

if [ "$var1" = "$var2" ]

代码:

[css] view plaincopyprint?

  1. #!/bin/sh

  2. aa="August 15, 2012"

  3. bb="August 15, 2012"

  4. if [ "$aa" = "$bb" ]; then

  5. echo "yes"

  6. else

  7. echo "no"

  8. fi

判断子字符串包含关系: =~

代码:

[python] view plaincopyprint?

  1. a1="ithomer"

  2. a2="ithomer.net"

  3. a3="blog.ithomer.net"

  4. if [[ "$a3" =~ "$a1" ]]; then

  5. echo "$a1是$a3的子串!"

  6. else

  7. echo "$a1不是$a3的子串!"

  8. fi

  9. if [[ "$a3" =~ "$a2" ]];then

  10. echo "$a2是$a3的子串!"

  11. else

  12. echo "$a2不是$a3的子串!"

  13. fi

转载于:https://blog.51cto.com/bobbleyan/1616100

Linux 之 shell 比较运算符相关推荐

  1. linux命令行的操作符,Linux shell 比较运算符使用方法教程

    Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统.对于Linux基础,肯定要掌握的是基本命令和一些重要运算符,这篇文章主要介绍了Linux shell 比较运算符详解 ...

  2. linux 脚本 数字运算符,Shell 基本运算符

    Shell 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符 原生bash不支持简单的数学运算,但是可以通过其他命令 ...

  3. 八、Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程(中)

    @Author : Runsen @Date:2020/9/11 文章是Runsen在Gitchat付费文章分享:Linux 常用 Shell 命令,控制台的快捷键以及 Shell 编程 顺便同步到C ...

  4. Linux的shell脚本

    4:Linux的Shell编程 Shell 编程一般指 shell 脚本编程. 语法: ​ 使用 vi 编辑器新建一个文件 hello.sh #!/bin/bash echo "Hello ...

  5. Linux Bash Shell j简单入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  6. Linux Bash Shell编程快速入门

    BASH 的基本语法 最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  7. linux 终端 画圆,Linux Bash Shell快速入门

    BASH的基本语法 ·最简单的例子-- Hello World! ·关于输入.输出和错误输出 ·BASH中对变量的规定(与C语言的异同) ·BASH中的基本流程控制语法 ·函数的使用 2.1最简单的例 ...

  8. linux 系统 Shell语言 基础

    linux 系统 Shell语言 基础 第一章 Shell 编程 1 . 概述 ​ Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sh ...

  9. Linux【shell】 shell编程

    shell编程 一.shell脚本的执行方式 1.1 shell脚本的格式要求 脚本以#!/bin/bash开头 脚本需要有可执行权限 1.2 编写一个shell脚本 需求说明:创建一个shell脚本 ...

  10. linux之shell脚本

    1.shell脚本简介 shell脚本是与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或管理用的,但是它比Wind ...

最新文章

  1. 使用目标管理和精细化管理,更高效地完成目标
  2. android 页面翻转进场动画_Android实现翻转及延迟动画效果
  3. java instanceof 原理_java-在现代JVM实现中如何实现instanceof?
  4. oracle rac scan ip 用途 原理
  5. 经典shell面试题整理
  6. PP: 混合生产方式(MTO与MTS为例)
  7. thinkphp5 两个控制器传参数_thinkphp5控制器向+vue的data里传值
  8. c语言图片效果,c语言能显示图片吗
  9. 【做题记录】CF1428E Carrots for Rabbits—堆的妙用
  10. 使用React,Redux和Router进行真正的集成测试
  11. 前端学习(1285):node运行环境安装
  12. 【转】C,C++宏中#与##的讲解
  13. Linux认证复习题100道含答案
  14. The Vector Packet Processor (VPP)的安装
  15. 1米6农村放牛娃的奋斗历程:从同济、港理工,到清华、伯克利大学!
  16. APISpace 通知短信API
  17. 如何把截图固定在电脑页面上
  18. 2022 最新 JCR正式发布全球最新影响因子名单(前600名)
  19. Tiny4412裸机程序之代码重定位初体验
  20. 机器怎样可以学得更好?

热门文章

  1. BigDecimal浮点精度加减乘除运算
  2. Java开发笔记(一百三十六)JavaFX的窗格
  3. mysql查询结果进行排名
  4. 工作室招新管理系统需求分析
  5. Linux用户和组账户管理
  6. PHP 实现简单购物车功能(2)
  7. Dynamic CRM 2013学习笔记(二十八)用JS动态设置字段的change事件、必填、禁用以及可见...
  8. Cocos2d-x for Android iOS开发环境配置最佳实践
  9. 深圳中专计算机专业排名,深圳十大民办中专排行2019
  10. Python调shell