How to Compare Numbers and Strings in Linux Shell Script

本文中我们将学习使用 if 语句在 shell 脚本中比较数字、字符串和文件。

shell 脚本中比较的语法如下:

if [ conditions/comparisons]
    then
         commands
fi

例如:

if [2 -gt 3]
     then
     print "2 is greater"
     else
     print "2 is not greater"
fi

Compare Numbers

这是一种最常见的评估方法,即比较两个或多个数字。现在,我们将创建一个用于进行数值比较的脚本,但在此之前,我们需要知道用于比较数值的参数。下面提到的是用于数值比较的参数列表。

  • num1 -eq num2 检查第一个数字是否等于第二个数字
  • num1 -ge num2 检查第一个数字是否大于或等于第二个数字
  • num1 -gt num2 检查第一个数字是否大于第二个数字
  • num1 -le num2 检查第一个数字是否小于或等于第二个数字
  • num1 -lt num2 检查第一个数字是否小于第二个数字
  • num1 -ne num2 检查第一个数字是否不等于第二个数字

我们知道了用于数值比较的所有参数,在脚本中使用这些参数实战一下。

#!/bin/bash
# Script to do numeric comparisons
var1=10
var2=20
if [ $var2 -gt $var1 ]
    then
        echo "$var2 is greater than $var1"
fi
# Second comparison
If [ $var1 -gt 30]
    then
        echo "$var is greater than 30"
    else
        echo "$var1 is less than 30"
fi

Compare Strings

我们可能还需要比较两个或多个字符串,比较字符串可能有点棘手。对于字符串的比较,使用的参数如下所示:

  • var1 = var2 检查 var1 是否与 var2 相同
  • var1 != var2 检查 var1 是否与 var2 不同
  • var1 < var2 检查 var1 是否小于 var2
  • var1 > var2 检查 var1 是否大于 var2
  • -n var1 检查 var1 的长度是否大于零
  • -z var1 检查 var1 的长度是否为零

注意: 您可能已经注意到,这里使用的大于符号 (>) 和小于符号 (<) 也用于 Linux 中 stdin 或 stdout 的重定向。当在脚本中使用这些符号时,这可能是一个问题,那么可以做些什么来解决这个问题呢?

解决方案很简单,当在脚本中使用这些符号时,它们应该是转义字符一起使用,即将其用作“\>”或“\<”。

现在让我们创建一个脚本来进行字符串比较。

#!/bin/bash
# Script to do string equality comparison
name=linuxtechi
if [ $USER = $name ]
        then
                echo "User exists"
        else
                echo "User not found"
fi
# script to check string comparisons
var1=a
var2=z
var3=Z
if [ $var1 \> $var2 ]
        then
                echo "$var1 is greater"
        else
                echo "$var2 is greater"
fi
# Lower case  & upper case comparisons
if [ $var3 \> $var1 ]
        then
                echo "$var3 is greater"
        else
                echo "$var1 is greater"
fi

现在我们将创建另一个脚本,它将使用 -n 和 -z 来检查字符串是否有值。

#!/bin/bash
# Script to see if the variable holds value or not
var1=" "
var2=linuxtechi
if [ -n $var1 ]
        then
                echo "string  is not empty"
        else
                echo "string provided is empty"
fi

这里我们只使用 -n 参数,但我们也可以使用 -z,唯一的区别是:使用 -z 时,它搜索长度为零的字符串,而使用 -n 参数搜索大于零的值。

File comparison

这可能是比较中最重要的功能,用于文件比较的参数如下:

  • -e file 检查文件是否存在
  • -w file 检查文件是否存在 + 可写
  • -r file 检查文件是否存在 + 可读
  • -s file 检查文件是否存在 + 非空
  • -d file 检查文件是否存在 + 是一个目录
  • -f file 检查文件是否存在 + 是一个文件
  • -O file 检查文件是否存在 + 当前用户所有
  • -G file 检查文件是否存在 + 默认组与当前用户是否相同
  • -x file 检查文件是否存在 + 可执行
  • file A -nt file B 检查文件 A 是否比文件 B 更新
  • file A -ot file B 检查文件 A 是否比文件 B 更早

下面是一个文件比较的示例

#!/bin/bash
# Script to check file comparison
dir=/home/linuxtechi
if [ -d $dir ]
    then
          echo "$dir is a directory"
          cd $dir
          ls -a
    else
         echo "$dir is not exist"
fi

我的开源项目

酷瓜云课堂-开源知识付费解决方案


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。


引用和评论

0 条评论