我需要查看/etc/passwd
中是否存在用户。我使用grep,但是我很难将多个模式传递给grep。
我试过
if [[ ! $( cat /etc/passwd | egrep "$name&/home" ) ]];then
#user doesn't exist, do something
fi
我使用的是&符号而不是|因为这两个条件必须是真的,但它不起作用。
答案 0 :(得分:2)
尝试这样做:
$ getent passwd foo bar base
最后:
if getent &>/dev/null passwd user_X; then
do_something...
else
do_something_else...
fi
答案 1 :(得分:0)
与您的假设相反,正则表达式不会识别&
的交集,即使它是一个逻辑扩展。
要找到与多个模式匹配的行,请尝试
grep -e 'pattern1.*pattern2' -e 'pattern2.*pattern1' file
以任何顺序匹配模式,或切换到例如AWK:
awk '/pattern1/ && /pattern2/' file
(虽然在您的具体示例中,只需要"$name.*/home"
就足够了,因为匹配必须始终按此顺序发生。)
顺便说一下,您的扭曲if
条件可以重构为
if grep -q pattern file; then ...
if
条件将一个命令作为参数,运行它并检查其退出代码。任何正确编写的Unix命令都写入此规范,并在成功时返回零,否则返回非零退出代码。 (另请注意,没有无用的cat
- 几乎所有命令都接受文件名参数,而那些不能使用重定向处理的命令。)