Linux 之 shell 比较运算符

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


测试命令

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都会打印


示例:

#!/bin/sh

aa="August 15, 2012"
bb="August 15, 20122"
cc="123"
dd="123"

# -o
if [ "$aa" = "$bb" -o "$cc" = "$dd" ]; then
	echo "yes"
else
	echo "no"
fi

# -a and !
if [ "$aa" != "$bb" -a "$cc" = "$dd" ]; then
	echo "yes"
else
	echo "no"
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"))


整数比较实例

#!/bin/bash


file='folder_url_top24/url_usa_top24_0'
fileSize=`ls -l folder_url_top24/url_usa_top24_0 | awk -F '[" "]' '{print $5}'`
FILESIZE=1000
#while [ ! -f $file -o "$fileSize" -lt "$FILESIZE" ]
#while [ ! -f $file -o "$fileSize" -lt 1000 ]
while (("$fileSize" < 1000)) 
do
    echo "down again..."
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"



字符串比较实例:

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

代码:

#!/bin/sh

aa="August 15, 2012"
bb="August 15, 2012"

if [ "$aa" = "$bb" ]; then
	echo "yes"
else
	echo "no"
fi


注意:
使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

awk '{print $2}' class.txt | grep '^[0-9.]' > res


推荐参考:

Linux Shell函数返回值

Linux 之 shell 比较运算符(推荐)

Linux Shell学习简单小结(推荐)

SHELL学习笔记----IF条件判断,判断条件


IEEE Transactions on Industrial Informatics(TII)投稿全流程解析:从准备到成功提交 本文详细解析了向IEEE Transactions on Industrial Informatics(TII)投稿的全流程,涵盖从投稿前的格式准备、内容结构优化到在线提交系统实操等关键环节。重点强调了遵守TII严格的格式规范、双盲评审要求以及如何构建有说服力的学术叙述,旨在帮助研究者提升稿件质量,顺利通过评审。 阅读详情

相关推荐

Linux Shell中的比较运算符及编程示例

这些是Shell中常用的比较运算符及其用法示例。您可以根据需要在脚本中使用这些运算符比较变量或表达式的值,并根据比较结果执行相应的操作。希望本文对您在Linux Shell编程中使用比较运算符有所帮助!比较运算符Linux Shell编程中常用的工具,它们用来比较两个值的关系并返回布尔值。在本文中,我们将详细介绍Shell中的比较运算符,并提供一些示例代码帮助您更好地理解它们的用法。

PixelLogic的博客 652

Shell条件测试之字符串比较

1、字符串比较(字符串运算符): str1 = str2 : 相等比较 str1 != str2 : 不等比较 str1 < str2 : str1小于str2为true,比较字母在字母表顺序,字母越靠后就越大,反之越小 str1 > str2 : str1大于str2为true,比较字母在字母表顺序,字母越靠后就越大,反之越小 -n str1 : str1长度不是0则为true -z s...

晓康的博客 2万+

12S BMS 核心设计:基于 STM32H743+BQ34Z100 的 SOC/SOH 实现与全链路技术解析(上)

本文详细介绍了基于STM32H743和BQ34Z100的12串锂电池管理系统(BMS)设计。该系统采用主控制器+专用电量监测计架构,可实现高精度SOC(±1%)和SOH(±2%)估算,支持36V-50.4V电压范围。硬件设计包括电压/电流采样、温度测量、保护电路等模块,软件实现基于HAL库开发,采用DMA方式提高I2C通信效率。系统通过TI专利的ImpedanceTrack™算法实现三维融合估算,并具备完善的保护功能。该设计适用于电动工具、轻型电动车等中功率设备,具有精度高、响应快。

bother3000的博客 1358

Shell字符串比较

Shell 中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等。 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.整数比较

shengqiukang的专栏 1963

linux 脚本 “=~” 表达 意思

1、在shell脚本中,经常遇到 “=~” ,表达形式如下: [[ "string" =~ pattern ]]  “=~” 用于判断string和右边的正则表达式pattern是否匹配   2、shell 脚本 [root@master ~]# cat hh.sh #!/bin/bash INT=-15a if [[ "$INT" =~ ^-?[0-9]+$ ]]; then ec...

Man_In_The_Night的博客 1万+

LinuxShell比较运算符

Linuxshell 比较运算符 运算符 描述 示例 文件比较运算符 -efilename 如果filename存在,则为真 [ -e /var/log/syslog ] -dfilename 如果filename为目录,则为真 [ -d /tmp/mydir ] -ffilename 如果filename为常规文...

云水间 343

linux shell 比较运算,Linuxshell 比较运算符.pdf

您所在位置:网站首页 > 海量文档&nbsp>&nbsp计算机&nbsp>&nbsplinux/Unix相关Linuxshell 比较运算符.pdf6页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。...

weixin_31289551的博客 143

LinuxShell系列1_比较运算符

LinuxShell系列1_比较运算符转载自如下博客1-文件比较运算符 运算符 描述 示例 -e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ] -f filename 如果 filename 为常规文件

kaierlong的博客 357

shell字符串处理之字符串比较

尽量使用双中括号([[]]),能够避免很多逻辑错误,比单中括号([])更加清晰。

Black.Spider的博客 4877

shell 脚本编程 九:总结

shell 编程总结

OnlyLove_的博客 3868

shell 的大于等于小于等

shell 的大于等于小于等

二哈欢乐多的博客 1万+

深入理解Linux =~

Linux中的=~符号是非常强大的正则表达式匹配工具,它支持匹配、分组和替换等操作。在使用时需要注意一些细节,但是掌握了它,可以帮助我们快速、方便地处理字符串。转自深入理解Linux =~_笔记大全_设计学院。

weixin_42419429的博客 1911

linux shell 字符串比较相等、不相等

#!/bin/sh #测试各种字符串比较操作。 #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型, #单引号不对相关量进行替换,如不对$符号解释成变量引用,从而用对应变量的值替代,双引号则会进行替代 A="$1" B="$2" echo "输入的原始值:A=$A,B=$B" #判断字符串是否相等 if [ "$A" = "$...

whatday的专栏 1万+

shell中字符串的比较与判断总结

接触shell也有好几年了,近几年主要从事使用shell操作数据库的工作。对于执行结果的返回值进行判断的情形比较多,而对于字符串的判断与比较用得相对较少。所以有时候需要用一下一时也记不太清,有必要整理一下相关的用法。 一、字符串的比较 (1)表达式可以使用test或者[],效果是一样的 比较字符串的一般用法如下: #!/bin/bash s1="test1" s2="test" s3="test" #表达式可以使用test或者[],效果是一样的。 if test $s1 = $s2 then

u011489186的博客 1万+

高通9008线刷工具QFIL单文件版

高通9008线刷工具QFIL单文件版,无需安装,双击可用,随身携带

上一篇: 单例模式的常见面试题
下一篇: 用LinkedHashMap实现的简单LRU Cache
iteye_11539
博客等级 码龄8年 106粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值