2017-05-02 30 views
0

我正在嘗試編寫一個腳本來檢查用戶(即作爲參數發送)是否已登錄。我想要回答0,如果用戶登錄,返回0;如果用戶沒有登錄,則返回1。Bash腳本 - 檢查用戶是否已登錄

但我遇到了一些問題。每當我嘗試運行腳本時,即使發送用戶作爲參數,我也會收到消息「您需要輸入用戶」。

#!/bin/bash 

function checkUser 
{ 
    status=0 

    for u in $(who | awk '{print $1}' | sort | uniq) 
    do 
    if [ "$u" = "$1" ]; then 
     status=1 
    fi 
    done 

    if [ "$status" = "1" ]; then 
    echo "$user is logged in." 
    exit 0 
    else 
    echo "$user is not logged in." 
    exit 1 
    fi 
} 
if [[ $1 -eq 0 ]] ; then 
    echo 'You need to enter a user' 
    read u 
else 
    user=$1 
fi 
+0

用一個簡單的谷歌搜索,你可以準確地找到你的運動有幾種方法做到這一點:https://ubuntuforums.org/showthread.php?t=2075873 –

+0

我沒有看到任何解決方案,只有問題。 – LinuxN00b

回答

0

你必須提供下列檢查用戶是否有提供論據與否。

if [ $# -eq 0 ] ; then 

$#用於在命令行提供的參數的數量

你完整的代碼應該是這樣的,

#!/bin/bash                  

function checkUser {                

     status=0                 
     for u in $(who | awk '{print $1}' | sort | uniq)       
     do                  
      if [ "$u" == "$1" ]; then           
        return 0              
      fi                 
     done                  
     return 1                 
}                    

if [ $# -eq 0 ] ; then               
     echo 'You need to enter a user'           
     read user                
     checkUser $user               
     ret_val=$?                
else                    
     user=$1                 
     checkUser $user               
     ret_val=$?                
fi                    

if [ $ret_val -eq 0 ]; then              
     echo "User Logged In"             
     exit 0                 
else                    
     echo "User Not Logged In"            
     exit 1                 
fi 
+0

不是'whoami'只顯示我的ID嗎?我需要檢查所有已登錄的人。 – LinuxN00b

+0

現在嘗試。要檢查所有用戶的代碼是否正常工作。使用狀態變量 –

+0

也可以刪除。檢查最新的編輯 –

1

if [[ $1 -eq 0 ]]檢查位於函數體外部。這就是爲什麼它無法訪問函數調用的參數$1。另外,你甚至不會在任何地方調用這個函數。

試試這個:

#!/bin/bash 

set -eu 

[ $# == 1 ] || { 
    echo "Usage: $0 USERNAME" 
    exit 1 
} 

USER=$1 

who | awk '{print $1}' | sort | uniq | grep -q "^$USER\$" && { 
    echo "$USER is logged in" 
    exit 0 
} || { 
    echo "$USER is not logged in" 
    exit 1 
} 

UPDATE:退出正確退出代碼

+0

此外,變量$ user不會在任何地方獲取值,而是使用變量$ u。 –

+0

該解決方案不起作用,因爲返回應該發送到shell,而不是打印到cmd行。哦,我的好,我討厭編程!!!!! – LinuxN00b

+0

退出命令將解決該問題,編輯答案。 –