#!/bin/bash users=$(cut -d: -f1 /etc/passwd) for user in $users do if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 ]] then if [[ $(chage -l $user | grep "Password expires" | grep "密码过期时间" | cut -d: -f2 | tr -d ' ') == "never" || $(chage -l $user | grep "Password expires" | grep "密码过期时间" | cut -d: -f2 | tr -d ' ') == "从不" ]] then echo "$user: Password never expires" else expire_date=$(date -d "$(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" +%s) current_date=$(date +%s) if [[ $expire_date -lt $current_date ]] then echo "$(hostname -I | awk '{print $1}'), $user: Password has expired" else echo "$user: Password will expire on $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" fi fi else account_status=$(passwd -S $user | awk '{print $2}') if [[ "$account_status" == "L" ]]; then echo "$(hostname -I | awk '{print $1}'), User $user: account locked!" fi fi done这段代码去掉筛选非系统用户
时间: 2023-12-10 12:37:50 浏览: 100
可以将第二个if语句中的条件改为:
```
if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 && $(getent passwd $user | cut -d: -f7) != "/sbin/nologin" && $(getent passwd $user | cut -d: -f7) != "/usr/sbin/nologin" ]]
```
这样就可以排除掉系统用户了。
相关问题
#!/bin/bash users=$(cut -d: -f1 /etc/passwd) for user in $users do if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 ]] then if [[ $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ') == "never" ]] then echo "$user: Password never expires" else expire_date=$(date -d "$(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" +%s) current_date=$(date +%s) if [[ $expire_date -lt $current_date ]] then echo "$(hostname -I | awk '{print $1}'),$user: Password has expired" else echo "$user: Password will expire on $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" fi fi else echo "" account_status=$(passwd -S $user | awk '{print $2}') if [[ "$account_status" == "L" ]]; then echo "$(hostname -I | awk '{print $1}'),User $user: account locked!" fi done语法问题
在第27行缺少一个 `fi` 关键字来结束第20行的 `if` 语句。同时,第24行的 `echo` 命令中,应该把逗号放在双引号内,否则会被视为两个参数。正确的脚本如下:
```
#!/bin/bash
users=$(cut -d: -f1 /etc/passwd)
for user in $users
do
if [[ $(getent passwd $user | cut -d: -f3) -ge 1000 ]]
then
if [[ $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ') == "never" ]]
then
echo "$user: Password never expires"
else
expire_date=$(date -d "$(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')" +%s)
current_date=$(date +%s)
if [[ $expire_date -lt $current_date ]]
then
echo "$(hostname -I | awk '{print $1}'), $user: Password has expired"
else
echo "$user: Password will expire on $(chage -l $user | grep "Password expires" | cut -d: -f2 | tr -d ' ')"
fi
fi
else
account_status=$(passwd -S $user | awk '{print $2}')
if [[ "$account_status" == "L" ]]; then
echo "$(hostname -I | awk '{print $1}'), User $user: account locked!"
fi
fi
done
```
grep -v '/sbin/nologin$' /etc/passwd | cut -d: -f1
### 处理方法
为了实现过滤掉使用 `/sbin/nologin` 的用户并提取用户名列表的目标,可以通过 `grep` 和 `cut` 工具组合完成此操作。
以下是具体的操作方式:
#### 使用命令
通过以下命令可以筛选出不使用 `/sbin/nologin` 的用户,并提取其用户名部分:
```bash
grep -v "/sbin/nologin" /etc/passwd | cut -d ":" -f1
```
- **`grep -v "/sbin/nologin"`**: `-v` 参数用于反向匹配,即排除包含 `/sbin/nologin` 的行[^1]。
- **`cut -d ":" -f1`**: 利用冒号 (`:`) 作为分隔符,提取每行的第一个字段(即用户名)[^3]。
#### 示例输出
假设 `/etc/passwd` 文件的内容如下:
```
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
mail:x:8:12:mail:/var/mail:/usr/sbin/nologin
user1:x:1000:1000:user1:/home/user1:/bin/bash
```
执行上述命令后,输出将是:
```
root
user1
```
这些是未使用 `/sbin/nologin` 的用户的用户名列表。
---
### 获取 IP 地址的脚本扩展
如果还需要结合获取 IP 地址的功能,则可以在同一脚本中加入该逻辑。例如:
```bash
#!/bin/bash
# 设置命令解释器
ipaddr=$(ifconfig eth0 | head -n 2 | tail -n 1 | tr -s " " | cut -d " " -f3)
# 打印 IP 地址
echo "IP Address: $ipaddr"
# 提取非 nologin 用户名列表
users=$(grep -v "/sbin/nologin" /etc/passwd | cut -d ":" -f1)
# 输出用户名列表
echo "Non-nologin Users:"
for user in $users; do
echo "$user"
done
```
运行以上脚本会同时显示当前主机的 IP 地址以及所有非 `/sbin/nologin` 用户的名字。
---
### 注意事项
- 如果系统中的默认 shell 路径不是标准路径(如某些发行版可能有差异),则需调整正则表达式的匹配内容。
- 上述命令适用于大多数基于 Linux 的操作系统环境[^2]。
---
阅读全文
相关推荐














