确认变量的数字字符

时间:2014-12-13 12:42:57

标签: bash

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

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

我想总结4个变量,除非值为" CLOSED"

3.200
CLOSED
1.800
0.600

当我做以下总和时,有一个错误...我的事情我的变量不是数字,任何帮助?我如何强制它们成为数字然后做总和?

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

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

2 个答案:

答案 0 :(得分:1)

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并不是那么好,但我认为以上内容可以提供帮助。总和是所有变量的总和

答案 1 :(得分:0)

您的代码有两个问题。第一个是您尝试使用除整数之外的值。 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