Linux 脚本最后添加的用户
Linux scripting last user added
我是 Linux 脚本编写的新手,在这个练习中遇到了困难。
我需要查明当前用户是否是最后添加的用户。
如果没有,那么我需要显示最后添加的用户。
这是我的脚本:
#!/bin/bash --
lastUser ='tail -1 /etc/passwd | cut -d: -f1'
if [[ $lastUser -ne $USER ]]; then
echo "I am $USER and I am not the last added user."
echo "The last added user is $lastUser."
else
echo "I am $USER and I am the last added user."
fi
我得到的错误:line 3: lastUser: command not found.
我做错了什么?
这应该可以解决问题:
lastUser=$(tail -1 /etc/passwd | cut -d: -f1)
if [ "$lastUser" != "$USER" ]; then
echo "I am $USER and I am not the last added user."
echo "The last added user is $lastUser."
else
echo "I am $USER and I am the last added user."
fi
lastUser
是您提供的代码中的一个字符串,它没有执行 cmd 。
另外,不要忘记不要在 =
周围放置空格
注意:/etc/passwd
未排序!
如果添加了一些 系统用户,使用 tail -n1 /etc/passwd
可能会出现错误(例如安装新的 daemon)。
例如,运行 命令 pwck -s
将按 UID 对您的 /etc/passwd
文件进行排序。
但是由于删除用户的UID可以重新分配给新用户,这种方式不是很好...
您可以考虑这个 bash 脚本:
#!/bin/bash
uid=0 unam=root
last=65000
[ -f /etc/adduser.conf ] && last=$(
. /etc/adduser.conf
echo $LAST_UID
)
while IFS=: read cunam foo cuid foo;do
[ $cuid -gt $uid ] &&
[ $cuid -le $last ] &&
uid=$cuid unam=$cunam
done </etc/passwd
if [[ $uid -ne $UID ]]; then
echo "I am '$USER' and I am not the last added user."
echo "The last added user is user #$uid: '$unam'."
else
echo "I am $USER and I am the last added user."
fi
我的回答:
由于这种请求(知道谁是最后创建的用户)不是常见的(支持的)请求,您可以添加自己的规则:
sudo tee >/dev/null /usr/local/sbin/adduser.local <<"eoadd"
#!/bin/sh
date +"%s " >>/etc/flat_userfile
eoadd
sudo tee >/dev/null /usr/local/sbin/deluser.local <<"eodel"
#!/bin/sh
sed -e "/ $/d" -i /etc/flat_userfile
eodel
sudo chmod +x /usr/local/sbin/{add,del}user.local
完成后,每次添加或删除一个用户,都会添加或删除一行in/from /etc/flat_userfile
.
我使用 date
而不是 echo
来存储帐户创建日期。
我是 Linux 脚本编写的新手,在这个练习中遇到了困难。 我需要查明当前用户是否是最后添加的用户。 如果没有,那么我需要显示最后添加的用户。
这是我的脚本:
#!/bin/bash --
lastUser ='tail -1 /etc/passwd | cut -d: -f1'
if [[ $lastUser -ne $USER ]]; then
echo "I am $USER and I am not the last added user."
echo "The last added user is $lastUser."
else
echo "I am $USER and I am the last added user."
fi
我得到的错误:line 3: lastUser: command not found.
我做错了什么?
这应该可以解决问题:
lastUser=$(tail -1 /etc/passwd | cut -d: -f1)
if [ "$lastUser" != "$USER" ]; then
echo "I am $USER and I am not the last added user."
echo "The last added user is $lastUser."
else
echo "I am $USER and I am the last added user."
fi
lastUser
是您提供的代码中的一个字符串,它没有执行 cmd 。
另外,不要忘记不要在 =
注意:/etc/passwd
未排序!
如果添加了一些 系统用户,使用 tail -n1 /etc/passwd
可能会出现错误(例如安装新的 daemon)。
例如,运行 命令 pwck -s
将按 UID 对您的 /etc/passwd
文件进行排序。
但是由于删除用户的UID可以重新分配给新用户,这种方式不是很好...
您可以考虑这个 bash 脚本:
#!/bin/bash
uid=0 unam=root
last=65000
[ -f /etc/adduser.conf ] && last=$(
. /etc/adduser.conf
echo $LAST_UID
)
while IFS=: read cunam foo cuid foo;do
[ $cuid -gt $uid ] &&
[ $cuid -le $last ] &&
uid=$cuid unam=$cunam
done </etc/passwd
if [[ $uid -ne $UID ]]; then
echo "I am '$USER' and I am not the last added user."
echo "The last added user is user #$uid: '$unam'."
else
echo "I am $USER and I am the last added user."
fi
我的回答:
由于这种请求(知道谁是最后创建的用户)不是常见的(支持的)请求,您可以添加自己的规则:
sudo tee >/dev/null /usr/local/sbin/adduser.local <<"eoadd"
#!/bin/sh
date +"%s " >>/etc/flat_userfile
eoadd
sudo tee >/dev/null /usr/local/sbin/deluser.local <<"eodel"
#!/bin/sh
sed -e "/ $/d" -i /etc/flat_userfile
eodel
sudo chmod +x /usr/local/sbin/{add,del}user.local
完成后,每次添加或删除一个用户,都会添加或删除一行in/from /etc/flat_userfile
.
我使用 date
而不是 echo
来存储帐户创建日期。