我正在尝试学习 Bash 脚本,并做一些练习。
现在正在尝试创建搜索名称并从文件中获取记录的脚本。文件内容是这样的:Name:Phone:Email
示例:John Doe:123456789:[email protected]
但是我创建了一个函数
names=$(awk '{print $1}' $HOME/name_list.txt)
name_list()
{
for i in $names; do
if [ "$i" == "$name" ];then #name is user input from scriptfile.
echo $names | grep -o $i | wc -l | tr "\n" " ";echo "person found"
else
echo "Couldn't find anyone with given name"
fi
done
}
我感到困扰的是,我的if
状况会为文件中的每个“i”生成“找到的人”输出。同样,else
条件为每个不匹配的“i”生成输出。我可以理解为什么它会这样工作,但我找不到其他方法。我希望我的脚本扫描所有文件,并且只为总匹配生成 1 个输出,如果没有匹配则只生成 1 个输出。
假设您只想显示“未找到”消息一次.....您可以尝试这样的事情:
names=$(awk -F'[:]' '{print $1}' name_list.txt)
IFS=$'\n'
name=$1
found=0
name_list(){
for i in $names; do
if [ "$i" == "$name" ];then #name is user input from scriptfile.
echo "person found at line $(grep -n $name name_list.txt | cut -d: -f1)"
found=1
break
fi
done
if [ $found == 0 ]
then
echo "Couldn't find anyone with given name"
fi
}
我只在 AWS 行 + IFS=$'\n'中添加了-F'[:] ' 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句