我需要做一个操作但是我的代码在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")
答案 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