Linux 下 Shell 脚本的 IF 判断使用方法,小数、浮点数的大小对比判断

Linux shell 脚本中的 if 语句是一种基本的流程控制结构,用于根据条件执行不同的代码块。在 Bash 或其他 shell 环境中,if 语句可以使用各种比较形式来测试文件属性、字符串值、以及数值等。


基本语法格式

if [ 条件判断 ]; then
  # 条件为真时执行的命令
elif [ 另一个条件判断 ]; then
  # 另一个条件为真时执行的命令
else
  # 所有条件都不为真时执行的命令
fi


文件测试运算符

-e 文件存在。

-f 文件存在且是一个常规文件。

-d 文件存在且是一个目录。

-s 文件存在且不为空。

-r 文件存在且可读。

-w 文件存在且可写。

-x 文件存在且可执行。


字符串比较运算符

= 或 == 两个字符串相等。

!= 两个字符串不相等。

-z 字符串长度为零,或这个变量是空的。

-n 字符串长度非零,或这个变量不为空。


整数比较运算符

-eq 等于。

-ne 不等于。

-lt 小于。

-le 小于等于。

-gt 大于。

-ge 大于等于。


用法用例


复合条件判断

使用 && (AND)和 || (OR)来组合多个条件。

if [ 条件1 ] && [ 条件2 ]; then
  # 条件1 和 条件2 都为真时执行
fi

if [ 条件1 ] || [ 条件2 ]; then
  # 条件1 或 条件2 为真时执行
fi


使用示例

检查文件是否存在并且可写:

if [ -e /path/to/file ] && [ -w /path/to/file ]; then
  echo "文件存在且可写"
else
  echo "文件不存在或不可写"
fi

比较两个字符串是否相等:

if [ "$str1" == "$str2" ]; then
  echo "字符串相等"
else
  echo "字符串不相等"
fi

检查变量值是否大于10:

if [ $var -gt 10 ]; then
  echo "变量值大于10"
else
  echo "变量值小于等于10"
fi


使用注意事项

1、在使用 [ 和 ] 时,它们两边应该有空格。

2、比较字符串时,最好将变量用双引号包围,避免空字符串或包含空格的字符串导致的错误。

3、使用 -eq、-ne、-lt 等整数比较运算符时,确保比较的变量值是整数。


如果你需要对小数进行对比

要在 Linux shell 脚本中比较小数(浮点数),需要使用一些不同于整数比较的方法,因为标准的 IF 不支持浮点数比较。对于小数的比较,通常会借助 bc 命令或者 awk 等外部工具来实现。


使用 bc 命令比较小数

bc 是一个用于数学运算的语言,支持浮点数计算。你可以通过将比较逻辑传递给 bc 并检查其输出来比较小数。bc 会返回 1 表示真(true),0 表示假(false)。

基本语法:echo "表达式" | bc

例如:

num1=3.14
num2=2.18

# 比较 num1 是否大于 num2
result=$(echo "$num1 > $num2" | bc)
if [ $result -eq 1 ]; then
  echo "$num1 大于 $num2"
else
  echo "$num1 不大于 $num2"
fi


使用 awk 比较小数

awk 是另一个强大的文本处理工具,它也支持浮点数的比较。使用 awk,你可以直接在其条件表达式中进行数值比较,并根据比较结果执行相应的动作。

num1=3.14
num2=2.18

# 使用 awk 比较 num1 和 num2
awk -v a="$num1" -v b="$num2" 'BEGIN{ if (a > b) print "1"; else print "0"}'



发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。