Bash脚本,用于根据日期和UID删除多个用户



我正在编写一个bash脚本,它基于两件事删除用户:创建日期和用户ID。如果日期在终端给出的日期之前,且用户ID大于1000,则应从系统中删除该用户。我有一些代码写出来,它给了我很多问题,因为在用户名,创建日期和ID需要分割或"切割"的信息文件。有没有更好的方法来处理这个问题,而不是像我那样把这些碎片分解成一个数组?

#!/bin/bash
if [ $# -eq 0 ] ; then
        echo $0 "<date(year/month/day) filename>"
        exit 1
fi
dateForDeletion=$1
listOfUsers=$2
for i in `cat $listOfUsers` | while IFS='/t' read username date; do
        ${array[0]}="$username"
        ${array[1]}="$date"
        uid=`id -u ${array[0]}`
        if [$dateForDeletion < $date] && [uid > 1000] ; then
                `sudo userdel $username`
        fi
done

您确实应该从小处开始构建,在添加更多语句之前分别测试每个语句。以下是代码中的一些问题:

  1. 你正在使用一个奇怪的for和while循环的混合。
  2. IFS="/t"似乎试图将IFS设置为选项卡。应该是IFS=$'t'
  3. ${array[0]}="$username"不是有效的赋值。你应该使用array[0]="$username",虽然我不确定你为什么要把它分配给一个数组。
  4. [$dateForDeletion < $date]不是一个有效的条件/命令。它应该是[[ $dateForDeletion < $date ]](假设日期是yyyy-mm-dd格式或可以作为字符串进行比较的格式)。
  5. [uid > 1000]不是一个有效的条件/命令。应该是[ "$uid" -gt 1000 ]
  6. `sudo userdel $username`不应该有反引号。

循环应该是这样的:

while IFS=$'t' read -r username date
do
  uid=$(id -u "$username")
  if [[ $dateForDeletion < $date && $uid -gt 1000 ]]
  then
    sudo userdel "$username"
  fi
done < "$listOfUsers"

最新更新