You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Shell脚本获取登录用户信息并保存,及替换'w'命令实现需求?

解决Shell脚本的两个需求

没问题,我来一步步帮你搞定这两个Shell脚本需求~

1. 编写显示日期时间、列出登录用户并保存信息的脚本

这里有一个完整的脚本,既能在终端实时显示信息,又能把内容持久化保存到文件里:

#!/bin/bash

# 自定义输出文件路径,你可以根据需要修改成任意路径和文件名
OUTPUT_FILE="system_status.log"

# 输出并记录当前日期时间
echo "=== 当前系统日期时间 ===" | tee -a $OUTPUT_FILE
date "+%Y-%m-%d %H:%M:%S" | tee -a $OUTPUT_FILE
echo "" | tee -a $OUTPUT_FILE  # 空行分隔内容,让日志更易读

# 输出并记录已登录用户信息
echo "=== 已登录用户详情 ===" | tee -a $OUTPUT_FILE
who -u | tee -a $OUTPUT_FILE
echo "" | tee -a $OUTPUT_FILE

echo "✅ 信息已成功保存至 $OUTPUT_FILE"

脚本小说明:

  • tee -a 命令会同时把内容输出到终端和追加到指定文件,比单纯的重定向更实用
  • date "+%Y-%m-%d %H:%M:%S" 是自定义的日期时间格式,你可以根据喜好调整格式参数
  • who -u 会列出当前已登录用户的用户名、终端、登录时间以及空闲状态,信息比w更简洁聚焦

2. 替换代码片段中的w命令,实现列出用户及其登录时间

针对你给出的代码片段,只需要用命令替换把w换成合适的命令即可,修改后的代码如下:

#!/bin/bash 
cat > log.log << EOF1 
=== 已登录用户及其登录时间 ===
$(who -u | awk '{printf "用户名: %-12s 登录时间: %s %s\n", $1, $4, $5}')
EOF1

关键细节:

  • $(...) 是Bash的命令替换语法,会把括号里命令的执行结果直接嵌入到here-doc的内容中
  • 用who -u代替w可以精准获取当前登录用户的核心信息,再通过awk提取并格式化用户名、登录日期和时间字段
  • 如果想要更详细的用户登录细节,也可以换成who -a,然后调整awk的字段提取规则就能适配

内容的提问来源于stack exchange,提问作者Soumyaranjan Acharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:05:59