Сценарий оболочки: изменение входного потока не работает по желанию

Я пытаюсь создать сценарий оболочки, который может подсчитывать слова и строки в файле. (да, я знаю, что вы можете сделать это с помощью wc, но только ради изучения циклов)

Код

echo "enter filename"
read f
if [ -s $f ]
then
    terminal=`tty`

    exec < $f

    nol=0
    now=0

    while read line
    do
        nol=`expr $nol + 1`
        set $line
        now=`expr $now + $#`
    done

    echo "No.of lines in the file =$nol"
    echo "No.of words in the file =$now"

    exec < $terminal
fi

ожидаемый вывод:

No.of lines in the file =3
No.of words in the file =166

Фактический результат:

$ sh wc.sh 
enter filename
spock.txt
CLUTTER_IM_MODULE='xim'
COLORTERM='gnome-terminal'
COMPIZ_BIN_PATH='/usr/bin/'
COMPIZ_CONFIG_PROFILE='ubuntu'
DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-PfcwnNxO9c'
DEFAULTS_PATH='/usr/share/gconf/ubuntu.default.path'
DESKTOP_SESSION='ubuntu'
DISPLAY=':0'
...
XDG_MENU_PREFIX='gnome-'
XDG_RUNTIME_DIR='/run/user/1000'
XDG_SEAT='seat0'
XDG_SEAT_PATH='/org/freedesktop/DisplayManager/Seat0'
XDG_SESSION_ID='c1'
XDG_SESSION_PATH='/org/freedesktop/DisplayManager/Session0'
XDG_VTNR='7'
XMODIFIERS='@im=ibus'
_='/bin/sh'
f='spock.txt'
line=''
nol='2'
now='66'
terminal='/dev/pts/0'
No.of lines in the file =3
No.of words in the file =166

Может ли кто-нибудь уточнить, что я делаю неправильно? спасибо.

1
задан 12 March 2015 в 09:16

0 ответов

Другие вопросы по тегам:

Похожие вопросы: