#!/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=30
,b=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
命令。