#!/bin/sh num= cat /etc/passwd | while read line do num=$(($num+)) done echo $num linux:~ # sh a.sh 原因:使用for,while,until,if,case这些命令时用到了重定向,那么sh会产生一个子shell来运行它们.num在循环体中能够正确的计数,一旦while执行完毕,子shell完成,其内部的变量numt就消失了.因而得到的结果是循环体外开始赋的值0! 解决: #!/bin/sh num