美文网首页
其他比较操作

其他比较操作

作者: rochestor | 来源:发表于2017-10-15 12:46 被阅读4次

整数比较

-eq 等于

if [ "$a" -eq "$b" ]

-ne 不等于 注:!= 是字符串判断

if [ "$a" -ne "$b" ]

-gt 或者 >

if [ "$a" -gt "$b" ]
(("$a">"$b"))

-ge 或者 >=

if [ "$a" -gt "$b" ]
(("$a">="$b"))

-lt 或者 <

if [ "$a" -lt "$b" ]
(("$a"<"$b"))

-le 或者 <=

if [ "$a" -le "$b" ]
(("$a"<="$b"))

字符串比较

=

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  

!=

if [ "$a" != "$b" ] 
在[[...]]  结构中会进行模式匹配

<

# 小于, 按照 ACSII 排序,两边不能有空格
if [[ "$a" < "$b" ]]
# 等价于
if [ "$a" \< "$b" ]
# 这里的 < 需要转义

>

跟 < 类似

-z

# 字符串为空,即字符串长度为0

String=''   # 长度为0的字符串变量。

if [ -z "$String" ]
then
  echo "\$String is null."
else
  echo "\$String is NOT null."
fi     # $String is null.

-n

# 字符串非空(null)
# 使用 -n 时字符串必须是在括号中且被引用( 包含在双引号内 )的。使用 ! -z 判断未引用的字符串或者直接判断通常可行,但是非常危险。判断字符串时一定要引用


if [ -n $string1 ]    # 并未声明或是初始化 string1。
then
  echo "String \"string1\" is not null."
else
  echo "String \"string1\" is null."
fi
# 尽管没有初始化 string1,但是结果显示其非空。

if [ -n "$string1" ]   # 这次引用了 $string1。
then
  echo "String \"string1\" is not null."
else
  echo "String \"string1\" is null."
fi                    # 在测试括号内引用字符串得到了正确的结果。



if [ $string1 ]       # 这次只有一个 $string1。
then
  echo "String \"string1\" is not null."
else
  echo "String \"string1\" is null."
fi                    # 结果正确。
# 独立的 [ ... ] 测试操作符可以用来检测字符串是否为空。
# 最好将字符串进行引用(if [ "$string1" ])。
#
# Stephane Chazelas 指出:
#    if [ $string1 ]    只有一个参数 "]"
#    if [ "$string1" ]  则有两个参数,空的 "$string1" 和 "]"


string1="a = b"

if [ $string1 ]       # $string1 这次仍然没有被引用。
then
  echo "String \"string1\" is not null."
else
  echo "String \"string1\" is null."
fi                    # 这次没有引用就错了。

demo

# zmore

string1="a = b"

if [ $string1 ]       # $string1 这次仍然没有被引用。
then
  echo "String \"string1\" is not null."
else
  echo "String \"string1\" is null."
fi                    # 这次没有引用就错了。

复合比较

-a 逻辑与

exp1 -a exp2 返回真当且仅当 exp1 和 exp2 均为真
和双方括号结构中的 Bash 比较操作符号 &&类似
可以在 test 命令或在测试括号中进行

-o 逻辑或

如果 exp1 或 exp2 为真,则 exp1 -o exp2 返回真
和双方括号结构中的 Bash 比较操作符号 || 类似
可以在 test 命令或在测试括号中进行。

注意: && || -a 以及 -o 的短路机制不一样

[ 1 -eq 1 ] && [ -n "`echo true 1>&2`" ]   # 真
[ 1 -eq 2 ] && [ -n "`echo true 1>&2`" ]   # 没有输出
# ^^^^^^^ 条件为假。到这里为止,一切都按预期执行。

# 但是
[ 1 -eq 2 -a -n "`echo true 1>&2`" ]       # 真
# ^^^^^^^ 条件为假。但是为什么结果为真?

# 是因为括号内的两个条件子句都执行了么?
[[ 1 -eq 2 && -n "`echo true 1>&2`" ]]     # 没有输出
# 并不是。

#  所以显然 && 和 || 具备“短路”机制,
# 例如对于 &&,若第一个表达式为假,则不执行第二个表达式直接返回假,
#+ 而 -a 和 -o 则不是

唯爱与技术不可辜负

相关文章

  • 其他比较操作

    整数比较 -eq 等于 if [ "$a" -eq "$b" ] -ne 不等于 注:!= 是字符串判断 if...

  • 其他操作

    show TABLES;展示某个库中的所有表 desc banner展示该表中的字段详情

  • jquery其他操作

    input框事件 鼠标移入移出 元素绝对位置

  • [PDO]②⑥--其他操作

    PdoMYSQL.class.func

  • 其他样式操作

  • jQuery其他操作

    这篇文章写一个选项卡的实现。首先做一个HTML文件 然后设置css样式,将这个按照选项卡的方式显示出来。 然后是为...

  • Screen Capture with getDisplayMe

    1、getUserMedia与getDisplayMedia*比较 除了下面提到的几点,其他操作,两者是相同的。 ...

  • 位操作

    c++中位操作操作符 这些位操作符只能用于整形的操作,其他会编译报错。位操作符的运算优先级比较低,因为尽量使用括号...

  • Java中null的注意事项

    1.你可以使用==或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作。 2.null是Java中的关键...

  • SAP ABAP, Fiori, Android和Hybris里

    ABAP 其实ABAP的编程范式相对其他语言比较简单,没有太多异步操作。除了STARTING NEW TASK可以...

网友评论

      本文标题:其他比较操作

      本文链接:https://www.haomeiwen.com/subject/ezzquxtx.html