我在列表中有一个名单列表(比如name.txt),它有一个一个一组的名单。
name.txt
babu
praveen
kamal
sneha
此名称将在我的bash脚本中作为运行时参数$ 1传递。 现在我必须做一个匹配来检查输入的名字是否在我的列表中。
如果不存在,那么我将打印出无效名称并退出。你能帮我解决这个问题吗?
我用
尝试了这个if [[ "$1" != "babu" || "$1" != "praveen" || "$1" != "kamal" ... ]]; then
exit
fi
但这在专业上看起来不太好。
有没有其他简单而体面的方法来实现这一目标?
答案 0 :(得分:2)
我猜你可以使用grep:
if ! grep -qFxf name.txt <<<"$1"; then
exit
fi
-q
是&#34;安静模式&#34; - 退出状态表示匹配-F
匹配固定字符串,而不是正则表达式-x
是一个完整的行匹配,因此子字符串的名称不匹配-f
表示模式列表包含在文件第一个参数中包含的字符串使用here字符串传递给grep。这是一个bash功能,所以如果你正在使用另一个shell,你可以选择类似if ! echo "$1" | grep -qFxf name.txt
的东西(但是bash方式是首选,因为它可以节省调用子进程)。
如果要确保抑制grep的任何错误输出,可以按照注释中的建议将2>/dev/null
添加到命令中。这可以防止显示发送到标准错误的任何消息。