私はオペレーティングシステムプロセス用のシェルスクリプトを書こうとしています。しかし、ファイルの内容を読むことはできません。質問に対する回答として、私が入力した内容だけを読んだようです。私が何を見逃しているのかよくわかりません(とても簡単です)。よろしくお願いします。
echo "what file do you want to count? "
read file
mystring=$file
for token in $mystring;
do
echo -n "lines: ";
echo -n $token | wc -l;
echo -n "words: ";
echo -n $token | wc -w;
echo -n "chars: ";
echo -n $token | wc -c;
done
ベストアンサー1
作成するスクリプトは、ファイル名に対応するファイルの行数などではなく、ユーザーが入力した文字列の行数などを計算します。
以下は、目的の操作を実行し、ファイルが存在しない場合や通常のファイルでない場合にエラーメッセージを表示するスクリプトです。
#!/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"
wc
3回呼び出すのを防ぐには:
#!/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" )
これは、デフォルトの出力が行、単語、および文字数であるという事実を利用しますwc
。このように出力したい場合はそれで十分です。