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

0 apt bash

#!/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
Run Code Online (Sandbox Code Playgroud)

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

/bin/max_timetrack.sh: line 16: 30+30
30: syntax error in expression (error token is "30")
Run Code Online (Sandbox Code Playgroud)

pLu*_*umo 5

你的错误在这一行:

b=`cat /pg/$i | head  -n  2 |awk '{print $8}'`
Run Code Online (Sandbox Code Playgroud)

head不会给你第二行,而是给你前n行。
所以b实际上会是:

30
30
Run Code Online (Sandbox Code Playgroud)

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

30+30
30
Run Code Online (Sandbox Code Playgroud)

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

b=`cat /pg/$i | head  -n  2 |awk '{print $8}' | tail -n 1`
Run Code Online (Sandbox Code Playgroud)

然而!

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

这就足够了:

b=$(awk 'NR==2{print $8}' "/pg/$i")
Run Code Online (Sandbox Code Playgroud)

请注意使用$(...)代替反引号,这是相同的,但首选

与此行相同

a=`cat /pg/$i | head  -n  1 |awk '{print $8}'`
Run Code Online (Sandbox Code Playgroud)

最好是

a=$(awk 'NR==1{print $8}' "/pg/$i")
Run Code Online (Sandbox Code Playgroud)

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

c=$(awk 'NR<=2{sum+=$8}END{print sum}')
Run Code Online (Sandbox Code Playgroud)

而且你正在解析ls,这是一个糟糕的选择:

file=`ls -l | awk '{print $9}'`
Run Code Online (Sandbox Code Playgroud)

你就不能这样做吗?

for i in *; do ... done
Run Code Online (Sandbox Code Playgroud)

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