2015-02-06 68 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 
相關問題