本文中我们将学习使用 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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。