在unix shell脚本中运行总计

时间:2012-11-30 12:39:26

标签: shell unix

我在unix shell脚本中遇到一些问题,我正在尝试编写,从命令行中保存多个文件中的行数。我可以单独计算行数并在每次循环中显示它们,但我的行变量总是在结尾读取0。

#! /bin/sh
lines=0

line_count(){
    #count the lines
    l= blablabla.....
    lines=`lines + l`
}

for f in "$@"
do
echo "total lines:"
( line_count "$f" )
done

1 个答案:

答案 0 :(得分:2)

如果你在子shell中运行某些东西,你所做的任何变量(例如增加$lines)仅在该子shell中有效,并在子shell退出时丢失。但是由于您使用的是函数,根本不需要子shell,只需调用函数即可。

同样lines=`lines + l`将尝试使用参数lines+执行命令l,我认为这不是您的意图。要评估表达式的结果,请使用$(( ... ))语法,并在变量前加$以使用它们的值。

最后你永远不会使用$lines的值,你可能想在调用函数后打印它。

#! /bin/sh
lines=0

line_count(){
    #count the lines
    l= blablabla.....
    lines=$(( $lines + $l ))
}

for f in "$@"
do
    line_count "$f"
    echo "total lines: $lines"
done