2017-03-03 76 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 

你将要擦亮这一点,使输出更有用。