编写一个脚本来获取带有“while read LINE”的文件的行号,但是失败了

时间:2015-07-26 08:03:36

标签: shell

#!/bin/sh
num=1
cat $1 | while read LINE
do
        num=`expr $num + 1`
done
echo $num

1 个答案:

答案 0 :(得分:1)

  1. 无用 cat之后使用管道时,您的脚本会产生一个子shell。在子循环结束后,子shell内的$num所做的所有更改都会丢失,并且您将返回到父shell。
  2. 您应该使用num而不是0
  3. 初始化1
  4. 最好不要使用所有大写字母变量名来避免与内部shell变量冲突。
  5. 您应使用$(...)进行命令替换,而不是反向勾号。
  6. 您应该使用:

    #!/bin/sh
    num=0
    while read -r line
    do
       num=$(expr $num + 1)
    done < "$1"
    echo $num