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"}'
发表评论