2015-02-06 125 views
0

这是一个简单的函数,我们的脚本用它来查找用户是否以root身份登录。如何查找用户在Linux下使用bash脚本以root身份登录?

do_check_user(){ 
    id | grep root 1>/dev/null 2>&1 
    if test "$?" != "0" 
     then 
      echo "" 
      echo " Invalid login, Please logon as root and try again!" 
      exit 0 
    fi 
} 

我不完全理解这个函数是如何工作的。我尝试了一些在线搜索以查找它的实现方式。但对我而言仍然不清楚。

特别这些行:

id | grep root 1>/dev/null 2>&1 
    if test "$?" != "0" 

我想这样做一步一步。但我得到的错误

id | grep root 1 
grep: 1: No such file or directory 

,如果你能解释我这句法和它在做什么,这将是非常有益的

感谢

+0

的第二个参数的grep应该是一个文件。名为“1”的文件在当前目录中不存在。 – fork0 2015-02-06 20:04:14

+0

带grep的行包含输出重定向操作符('1>/dev/null'和'2>&1'),假设stderr(标准错误输出通道,'2>')和标准输出通道(标准输出通道' 1>',通常写成'>')到/ dev/null(又名,无处)。 – fork0 2015-02-06 20:07:05

+0

顺便说一下,这是一个很糟糕的测试方法。假设你有一个名为'grooten'的用户或者一个名为'arrowroot_biscuits'的组? – rici 2015-02-06 21:03:03

回答

2
  1. id -

  2. grep搜索通过ID的输出,用于根

  3. 1>/dev/null 2>&1打印真实有效的用户ID和组ID发送给stdout/stderror/dev/null;所以你不会看到输出1>/dev/null只发送stdout to /dev/null

  4. if test "$?" != "0"检查最后执行的命令,它是grep,如果是0意味着SUCESSFUL的状态,如果不是0,你会得到的消息。

+0

感谢您的精心解答。在上面的第3点,是从grep发送到'/ dev/null'的stdout或stderr。最后的'2>&1'是什么意思? – 2015-02-06 20:19:50

+0

1是stdout。 2是stderr。 '2>&1'将stderr重定向到标准输出并发送'1> \ dev \ null',它们都将被发送到'\ dev \ null'; [酷](http://stackoverflow.com/questions/818255/in-the-shell-what-is-21) – Aman 2015-02-06 20:24:03

2

你只可以使用whoami命令。只有对于bash

#!/bin/bashyou 
if [[ $(whoami) == 'root' ]] ; then 
    echo "it's root" 
fi 

编辑: 你也可以你$ EUID变量,它指的是用户标识,所以在根情况下,它等于0

(($EUID == 0)) && echo 'root' 
+1

不应该回来吗? – EJK 2015-02-06 20:06:03

+0

好吧,我发现你已经修复了这个问题。 – EJK 2015-02-06 20:06:27

+0

@EJK,目前这个答案还没有被编辑过,你用一个类似的答案混淆了这个问题,这个答案在'$(..)'上使用反引用的遗留方式,有人认为后者是目前更优选的方法。 – user3439894 2015-02-06 20:20:25

1

尝试whoami

do_check_user() { test $(whoami) = root; }

+0

上面的测试是什么? – 2015-02-06 20:15:13

+0

[测试(1)](http://man7.org/linux/man-pages/man1/test.1.html) – fork0 2015-03-03 16:31:22

0

使用whoami

if [ `whoami` == "root" ] ; then 
    echo "root" 
fi 
2

bash,你可以测试$UID

if ((UID==0)); then 
    # I'm root 
fi 
相关问题