Reboot
一旦完成搜尋以查看沒有人登錄,我想重新啟動系統
我正在開發一個使用者菜單,這樣當使用者登錄時,他們得到的就是這個菜單;此菜單上是重新啟動選項的選擇。如果沒有人登錄,我希望其中一個選項重新啟動系統。
我希望進行搜尋以查看是否有人登錄。我認為這將是一個好的開始:
# who | wc
如果答案是 0 個使用者,我希望系統重新啟動。**注意:**我知道這不會是因為使用者使用菜單登錄。
除了訪問菜單的使用者外,我如何確定是否沒有其他使用者登錄?
這似乎是您正在尋找的。我看到的問題是,總會有至少 1 個使用者登錄,即訪問菜單的使用者,所以當使用者數為 1 時,您正在尋找。
$ who | awk '{print $1}' | sort -u | wc -l 1
這將輸出
who
並刪除第一列,即使用者名,然後對其進行唯一排序,然後對其進行計數。但IMO,它比這更複雜一些。例如,以這種方式查看情況會忽略此使用者是否有任何登錄的 SSH 會話。所以你可能想檢查上面的輸出是否
who
指定它只是:0
設備或者是否有任何pts/#
類型的行。例子
# represents the login for the user's desktop on display :0 saml :0 2014-12-01 01:56 (:0) # represents user's terminals or SSH connections saml pts/0 2014-12-01 01:57 (:0)
**注意:**請注意該
pts/0
行如何顯示它與哪個顯示器關聯,“:0”。所以這樣的事情似乎更合適:
num_pts=$(who | grep 'pts/' | wc -l) num_usr=$(who | awk '{print $1}' | sort -u | wc -l) if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi
例子
這是一個模擬執行,我有 2 個帳戶登錄:
$ who saml :0 2014-12-01 01:56 (:0) saml pts/0 2014-12-01 01:57 (:0) saml pts/1 2014-12-01 02:13 (:0) saml pts/2 2014-12-03 04:22 (:0) saml pts/3 2014-12-05 08:14 (:0) samtest pts/4 2014-12-05 08:14 (localhost)
手動執行命令會產生以下結果:
$ echo $num_usr 2 $ echo $num_pts 5 $ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi $
但是,如果我手動設置 2 個變數來模擬我已登錄到“:0”並且沒有打開終端:
$ num_usr=1 $ num_pts=0 $ if [ $num_pts -eq 0 ] && [ $num_usr -eq 1 ]; then echo "OK to logout";fi OK to logout
這可以濃縮,只是為了向您展示一種方法。