使用shell脚本查明是否存在unix用户名(多个)

时间:2017-09-22 08:32:45

标签: shell unix sh

我有以下脚本来检查系统中是否存在给定用户名“alice”。

if id "alice" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

我想检查alice,bob和carol是否存在。所以,当我在下面的代码中使用AND时,我确实得到了正确的结果,但它从id命令打印了不必要的行。

if id "alice" && id "bob" && id "carol" >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

输出如下:

uid=1001(alice) gid=1002(alice) groups=1005(somegroupname),1002(alice)
uid=1002(bob) gid=1003(bob) groups=1005(somegroupname),1003(bob)
user exists

我想确保如果alice,bob或carol不作为用户出现,我想打印一条有意义的消息,说明

<this_speicific_user> is not present.

4 个答案:

答案 0 :(得分:2)

您可以使用大括号将所有3个命令分组到一个组中:

{ id "alice" && id "bob" && id "carol"; } >/dev/null 2>&1

答案 1 :(得分:0)

您可以重定向每个命令的stderr:

if id "alice" >/dev/null 2>&1 && id "bob" >/dev/null 2>&1 && id "carol" >/dev/null 2>&1;
then
        echo "user exists"
else
        echo "user does not exist"
fi

Oor使用复合命令:

if { id "alice" && id "bob" && id "carol"; } >/dev/null 2>&1; then
        echo "user exists"
else
        echo "user does not exist"
fi

答案 2 :(得分:0)

使用Uri,就像使用private void wb_SourceUpdated(object sender, DataTransferEventArgs e) { WebBrowser wb = sender as WebBrowser; textBlock.Text = wb.Source.AbsoluteUri; } private void wb_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) { WebBrowser wb = sender as WebBrowser; textBlock.Text = e.Uri.AbsoluteUri; }

一样
||

如果您的请求是要显示所有未设置的用户,则有点棘手,但使用否定检查:

&&

甚至:

{ test1 && test2 && test3 } || else_function

答案 3 :(得分:0)

我认为一般的答案是,如果你想要一个特定的错误,你需要一个特定的测试。也就是说,如果你测试(condA || condB || condC),那么找出哪些条件失败并不是直截了当的。

另外,如果你想全部测试它们,无论如何,你都需要将它们分解为单独的测试。否则,如果id "alice"失败,其他人将因短路而无法接受测试。