我需要创建一个脚本,每天检查用户是否有主文件夹 home/testuser,如果没有,则创建一个。问题是我想从此示例中排除内置帐户:管理员、访客、samba 和其他。当使用 aduc 而不是 zentyal 创建用户时会出现问题。
我会使用 cron 进行日常检查,但不知道如何排除内置用户。
提前致谢!
答案1
正如已经说过的,我们通常不会在这里回答编程问题,但这听起来像是一个有趣的五分钟练习。
提供给您此命令时没有任何迹象表明它按预期工作,因为我的系统始终会创建用户主目录,而且我不会开始捣鼓和弄乱 passwd 文件来为您测试。因此,请先在文本框中运行此命令,或者注释掉执行任何操作的部分(mkdir 和 chown)并输入一些 echo 命令。
所有正常警告均适用:不提供或暗示任何支持;邮寄支票;我最喜欢的 - 它将在一个版本中得到修复。
#!/bin/bash
# Check if users home directory exists
while read -r LINE; do
userID=`echo $LINE | awk -F: '{print $3}' `
if [ "$userID" -ge "1000" -a "$userID" -lt "65534" ] ; then
userName=`echo $LINE | awk -F: '{print $1}' `
userHome=`echo $LINE | awk -F: '{print $6}' `
userGroup=`echo $LINE | awk -F: '{print $4}' `
if [ ! -d "$userHome" ]; then
echo found user $userID $userName is missing home: $userHome
mkdir $userHome
chown $userName:$userGroup $userHome
fi
fi
done < /etc/passwd
# Check if users home directory exists
while read -r LINE; do
userID=`echo $LINE | awk -F: '{print $3}' `
if [ "$userID" -ge "1000" -a "$userID" -lt "65534" ] ; then
userName=`echo $LINE | awk -F: '{print $1}' `
userHome=`echo $LINE | awk -F: '{print $6}' `
userGroup=`echo $LINE | awk -F: '{print $4}' `
if [ ! -d "$userHome" ]; then
echo found user $userID $userName is missing home: $userHome
mkdir $userHome
chown $userName:$userGroup $userHome
fi
fi
done < /etc/passwd
一定要小心 - 以 root 身份运行任何类型的文件(这需要)可能会对系统造成很大损害。测试,测试,再测试。