如何编写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
相关产品推荐
相关产品推荐

