确认变量的数字字符



>我需要做一个操作,但我的代码在 bash 中出了点问题

我有 4 个变量,km1、km2、km3、km4。

我想对 4 个变量求和,除非值为"关闭">

3.200
CLOSED
1.800
0.600

当我做下面的总和时,有一个错误...我想我的变量不是数字,有什么帮助吗?如何强制它们为数字,然后进行求和?

let km=$km1+$km3+$km4
echo $km

./sum.sh:第 41 行:let:km=3.200:语法错误:无效的算术运算符(错误标记为".200"(

km1=3.200
km2=CLOSED
km3=1.800
km4=0.600
total=`LC_ALL=C echo "$km1 $km2 $km3 $km4"|awk '{sum += $1+$2+$3+$4}END {print sum}'`

awk 不是那么好,但我认为以上可以提供帮助。 总计 是所有变量的总和

您的代码有 2 个问题。第一个是你尝试使用整数以外的值。Bash 只做整数。您可以使用 bc(一种任意精度的计算器语言(将值舍入为整数。第二个问题是你试图对字符串进行数学运算。因此,请考虑以下代码:

#!/bin/bash
km1=3.200;
km2="CLOSED";
km3=1.800;
km4=0.600;
km1=$(echo "$km1/1" | bc)
km3=$(echo "$km3/1" | bc)
km4=$(echo "$km4/1" | bc)
array=($km1 $km2 $km3 $km4)
for i in ${array[@]}; do
 case $i in
 *[0-9]*)
   (( result+=$i ))
 esac
done
echo $result

最新更新