O script que você escreveu contará as linhas etc. na string digitada pelo usuário, não no arquivo correspondente a esse nome de arquivo.
Este é um script que faz o que você quer, e também reclama se o arquivo não existe ou não é um arquivo normal:
#!/bin/sh
echo "Enter filename"
read fname
if [ ! -f "$fname" ]; then
echo "No such file!" >&2
exit 1
fi
lines=$( wc -l <"$fname" )
words=$( wc -w <"$fname" )
chars=$( wc -c <"$fname" )
printf 'The file "%s" has %d lines, %d words and %d characters\n' \
"$fname" "$lines" "$words" "$chars"
Para evitar chamar wc
três vezes:
#!/bin/sh
echo "Enter filename"
read fname
if [ ! -f "$fname" ]; then
echo "No such file!" >&2
exit 1
fi
printf 'The file "%s" has %d lines, %d words and %d characters\n' \
"$fname" $( wc <"$fname" )
Isso usa o fato de que wc
, por padrão, gera o número de linhas, palavras e caracteres. Isso seria suficiente se você quer que eles sejam exibidos assim.