Shell-Script

對於循環列印 echo 命令僅一次

  • May 4, 2019

在我創建的這個小 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:將是與您的參數搜尋匹配的學生數

引用自:https://unix.stackexchange.com/questions/517004