Shell-Script
對於循環列印 echo 命令僅一次
在我創建的這個小 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 中包含的是文件中確實存在的幾個名稱,以及文件中不存在的幾個名稱。發生的情況是循環為每個參數多次列印該消息,我只希望它列印一次。
您不想遍歷參數,這是一次讀取一個參數,導致您的 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
:將是與您的參數搜尋匹配的學生數