私が作成したこの小さなforループでは、すべてのパラメータに対してこのメッセージを一度だけ印刷するループが必要です。
for arg in $@
do
echo "There are $(grep "$arg" cis132Students|wc -l) classmates in this list, where $(wc -l cis132Students) is the actual number of classmates."
done
$ argには、ファイルに存在する複数の名前とファイルに存在しない複数の名前が含まれています。ループは各パラメータに対してメッセージを複数回印刷しますが、私は一度だけ印刷したいと思います。
ベストアンサー1
パラメータを一度に1つずつ読み込んでパラメータを繰り返して、各パラメータに対してechoステートメントを一度に実行したくありません。
次のことができます。
#!/bin/sh
student_file=cis132Students
p=$(echo "$@" | tr ' ' '|')
ln=$(wc -l "$student_file")
gn=$(grep -cE "$p" "$student_file")
echo "There are $gn classmates in the list, where $ln is the actual number of classmates."
p
:拡張正規表現モードでgrepに入力できる文字列に変換します。たとえば、パラメータを指定した場合は、jesse jay
次のように変換されますjesse|jay
ln
。 :入力ファイルの総行数(生徒)
gn
:パラメータ検索に一致する生徒の数