2017-03-03 69 views
0

我創建了一個名爲monitornsuaccounts.sh的腳本,它應該將其輸出文件附加到useraccountstatus.log。 useraccountstatus.log位於目錄/ var/local/nsu/logs /中。按組名,用戶名和上次登錄管理用戶帳戶linux

此腳本的輸出應該陳述每個用戶名和每個用戶名的以下信息:用戶名,上次登錄,用戶主目錄和相關組。最好應該有每個信息的列。

我用於用戶名的命令是sudo cat/etc/passwd | grep'/ home'。最後是找到每個用戶的最後一次登錄。組是爲了找到每個用戶的組。當我運行命令時,輸出文件只顯示我當前用戶需要的數據,而不是所有用戶。任何人的建議,將不勝感激。

#!/bin/bash 
usernames=sudo cat /etc/passwd | grep ‘/home’ 
echo 「$usernames」 > /home/daniel/names.txt 
mlast=$(cat names.txt | xargs -n1 last) 
mgroup=$(cat names.txt | xargs -n1 groups) 
cat names.txt > /var/local/nsu/logs/useraccountstatus.log 
echo 「$mlast」 >>/var/local/nsu/logs/useraccountstatus.log 
echo 「$mgroup」 >>/var/local/nsu/logs/useraccountstatus.log 

回答

0

有在腳本中有很多問題。

  1. 您對用戶的定義。你確定這是你想要的嗎?例如:root在/ home下沒有目錄。

  2. 看你的報價。 cat /etc/passwd | grep ‘/home’什麼也沒有返回,而cat /etc/passwd | grep 'home'返回/ etc/passwd中的節的列表

  3. 您可能只需要一個用戶名列表,而不是列表的節。沿

    cat /etc/passwd | grep 'home' | sed 's/:.*//' 
    
  4. 爲什麼sudosudo cat /etc/passwd行的東西嗎?

  5. 看看你的作業在

    usernames=sudo cat /etc/passwd | grep ‘/home’ 
    

    這是沒有意義的。你可以嘗試做一個

    usernames=`sudo cat /etc/passwd | grep '/home'| sed 's/:.*//'` 
    

而這僅僅是腳本的第一行。

無論如何,如果您的腳本無法按預期工作,您將需要進行一些調試。第一個問題,尤其是如果你沒經驗的話,是「我寫的命令給我的結果是我期望的嗎?」所以在你的情況下,你應該試過cat /etc/passwd | grep ‘/home’,你會發現它並沒有給你預期的結果。即使用正確的引號,你也會得到一個節的列表,這也不是你所期望的。你看過/home/daniel/names.txt,是你想要的文件內容嗎?我想不是:它是空的。

只是一個快速提示,讓你在正確的方向開始(雖然還存在一些問題和生民可能反對backtics)

#!/bin/bash 
usernames=`sudo cat /etc/passwd | grep '/home'| sed 's/:.*//'` 
mlast=`echo $usernames | xargs -n1 last` 
mgroup=`echo $usernames| xargs -n1 groups` 
echo $usernames > /var/local/nsu/logs/useraccountstatus.log 
echo "$mlast" >>/var/local/nsu/logs/useraccountstatus.log 
echo "$mgroup" >>/var/local/nsu/logs/useraccountstatus.log 

你將要擦亮這一點,使輸出更有用。