如何在 Linux 中将两个整数值相加?

如何在 Linux 中将两个整数值相加?
#!/bin/bash

cd /pg
file=`ls -l |awk '{print $9}'`
list=()
for i in $file
do
  echo $i
  a=`cat /pg/$i | head  -n  1 |awk '{print $8}'`
  b=`cat /pg/$i | head  -n  2 |awk '{print $8}'`
  #a1=`echo "$a" | tr -d  '"'`
  #b1=`echo "$b" | tr -d  '"'`
  echo $a
  echo $b
  c="$(($a+$b))"
  list=($c)
  #a1=`cat /pg/$i | head -n 2 |awk '{print $8}'`
done

在执行上述代码时,我收到以下错误,请帮助我修复问题,值的输出是a=30b=30但仍然无法将两者相加。

/bin/max_timetrack.sh: line 16: 30+30
30: syntax error in expression (error token is "30")

答案1

你的错误在这一行:

b=`cat /pg/$i | head  -n  2 |awk '{print $8}'`

head不会给你第二行,但是n第一行。
因此b实际内容如下:

30
30

而不是30你说的那样。因此错误,

30+30
30

您需要(同时保持复杂的结构):

b=`cat /pg/$i | head  -n  2 |awk '{print $8}' | tail -n 1`

然而!

您的小脚本中有很多无用/奇怪的用法:

这已经足够了:

b=$(awk 'NR==2{print $8}' "/pg/$i")

注意使用$(...)而不是反引号,这是一样的但值得优先考虑

与此行相同

a=`cat /pg/$i | head  -n  1 |awk '{print $8}'`

最好

a=$(awk 'NR==1{print $8}' "/pg/$i")

无论如何,你只能在里面做算术awk

c=$(awk 'NR<=2{sum+=$8}END{print sum}')

你也是解析ls,这是一个糟糕的选择:

file=`ls -l | awk '{print $9}'`

你不能这么做吗?

for i in *; do ... done

根据您想要执行的操作c,您可以将整个脚本写为一个awk命令。

相关内容